Как я могу узнать, на какую кодовую страницу я смотрю?
У меня есть устройство с некоторой документацией о том, как отправить его текст. Он использует 0x00-0x7F для отправки "специальных" символов, таких как акцентированные символы, знаки евро,...
Я предполагаю, что они скопировали существующую кодовую страницу и внесли некоторые изменения, но я понятия не имею, как определить, какая кодовая страница наиболее близка к той, что в моей документации.
Теоретически это должно быть легко сделать. Например, они отображают Á на 0x41, поэтому, если бы я мог найти способ просмотреть все кодовые страницы и найти те, которые имеют этот символ в этой позиции, это был бы кусок пирога.
Тем не менее, все, что я могу найти в Интернете, - это ссылки на дампы кодовых страниц, подобные той, на которую я смотрю, или программное обеспечение, которое использует эвристику для чтения текста и угадывания наиболее вероятной кодовой страницы. Конечно, кто-то сделал возможным поиск того, на какую кодовую страницу смотрят?
5 ответов
Если он использует 0x00
в 0x7F
для "специальных" символов, как он кодирует обычные символы ASCII?
В большинстве кодировок, которые поддерживают персонажа Á
его кодовая точка равна 193 (0xC1
). Если вы вычтете 128 из этого, вы получите 65 (0x41
). Может быть, ваша "кодовая страница" - это только верхняя половина одного из стандартных наборов символов, таких как ISO-8859-1 или windows-1252, с битом старшего разряда, установленным в ноль вместо одного (то есть вычитая 128 из каждого).
Если это так, я бы ожидал найти флаг, который вы можете установить, чтобы сообщить ему, следует ли преобразовывать следующую группу кодов с использованием "верхней" или "нижней" кодировки. Я не знаю ни одной системы, которая использует эту схему, но это наиболее разумное объяснение, которое я могу найти для описываемой вами ситуации.
Какой порядковый номер системы? Возможно, вы переключаете битовые заказы?
Нет способа автоматически определить кодовую страницу без дополнительной информации. Ниже слоя отображения это просто байты, и все байты созданы равными. Там нет никакого способа сказать "я 0x41 от этой и той кодовой страницы", есть только "я 0x41. Покажи мне! "
В большинстве кодовых страниц 0x41 - это просто нормальная буква "А", я не думаю, что на любой стандартной кодовой странице есть "А" в этой позиции. Он может иметь управляющий символ где-то перед A, который добавляет акцент, или использует нестандартную кодовую страницу.
Я не вижу смысла в знании "ближайшей кодовой страницы", вам просто нужно использовать документы, которые вы получили с устройством.
Ваше последнее предложение озадачивает, что вы подразумеваете под "можно посмотреть, какую кодовую страницу вы просматриваете"?
Если вы включите всю свою кодовую страницу, люди из SO могут быть более полезными и дать вам более полное представление об этой проблеме, так как наличие одной точки данных 0x41=Á не очень помогает.
Несколько случайная идея, но если вы можете воспроизвести значительный объем текста с устройства, вы можете попробовать запустить его через что-то вроде detect
функция в http://chardet.feedparser.org/.