Как я могу узнать, на какую кодовую страницу я смотрю?

У меня есть устройство с некоторой документацией о том, как отправить его текст. Он использует 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/.

Другие вопросы по тегам