Как я могу узнать, на какую кодовую страницу я смотрю? - PullRequest
0 голосов
/ 06 января 2009

У меня есть устройство с документацией о том, как отправить текст. Он использует 0x00-0x7F для отправки «специальных» символов, таких как акцентированные символы, знаки евро, ...

Я предполагаю, что они скопировали существующую кодовую страницу и внесли некоторые изменения, но я не знаю, как выяснить, какая кодовая страница наиболее близка к той, что в моей документации.

Теоретически это должно быть легко сделать. Например, они отображают Á на 0x41, поэтому, если бы я мог найти способ просмотреть все кодовые страницы и найти те, которые имеют этот символ в этой позиции, это было бы просто пирогом.

Тем не менее, все, что я могу найти в Интернете, - это ссылки на дампы кодовых страниц, подобные тому, который я просматриваю, или программное обеспечение, которое использует эвристику для чтения текста и угадывания наиболее вероятной кодовой страницы. Конечно, кто-то там позволил посмотреть, на какую кодовую страницу смотрят?

Ответы [ 5 ]

4 голосов
/ 06 января 2009

Если он использует от 0x00 до 0x7F для «специальных» символов, как он кодирует обычные символы ASCII?

В большинстве кодировок, которые поддерживают символ Á, его кодовая точка равна 193 (0xC1). Если вы вычтете 128 из этого, вы получите 65 (0x41). Возможно, ваша «кодовая страница» - это только верхняя половина одной из стандартных кодировок, таких как ISO-8859-1 или windows-1252, с битом старшего разряда, установленным в ноль вместо одного (то есть вычитая 128 из каждого).

Если это так, я бы ожидал найти флаг, который вы можете установить, чтобы сообщить ему, должна ли следующая группа кодовых точек быть преобразована с использованием «верхней» или «нижней» кодировки. Я не знаю ни одной системы, которая использует эту схему, но это наиболее разумное объяснение, которое я могу привести для описываемой вами ситуации.

1 голос
/ 06 января 2009

Какой порядковый номер системы? Возможно, вы переключаете битовые заказы?

1 голос
/ 06 января 2009

Невозможно автоматически определить кодовую страницу без дополнительной информации. Ниже слоя отображения это просто байты, и все байты созданы равными. Невозможно сказать «Я 0x41 из этой и той кодовой страницы», есть только «Я 0x41». Покажите мне! »

0 голосов
/ 14 января 2009

Идея довольно случайная, но если вы можете воспроизвести значительный объем текста с устройства, вы можете попробовать запустить его через что-то вроде функции detect в http://chardet.feedparser.org/.

0 голосов
/ 06 января 2009

В большинстве кодовых страниц 0x41 - это просто обычное "A", я не думаю, что у стандартных кодовых страниц есть "Á" в этой позиции. Он может иметь управляющий символ где-то перед буквой А, который добавляет акцент, или использовать нестандартную кодовую страницу.

Я не вижу смысла в знании "ближайшей кодовой страницы", вам просто нужно использовать документы, которые вы получили с устройством.

Ваше последнее предложение озадачивает, что вы подразумеваете под «можно посмотреть, на какую кодовую страницу вы смотрите»?

Если вы включите всю свою кодовую страницу, люди из SO могут быть более полезными и дать вам более полное представление об этой проблеме, имея одну точку данных 0x41 = Á, которая мало помогает.

...