Текст с кодировкой utf-8 прибывает с дополнительными символами, как? - PullRequest
2 голосов
/ 08 февраля 2011

Данные поступают в мое приложение через XML с данными в кодировке utf-8. Текст, который вводит пользователь, сохраняется в XML, а затем мое приложение читает его.

Недавно произошел сбой, когда пользователь написал один специальный символ в конце. В результате в XML каждый символ имеет дополнительный символ 0x40 перед ним. Поэтому вместо получения:

67 6f 20 61 68 65 61 64 (go ahead)

получено:

40 67 40 6f 40 20 40 61 40 68 40 65 40 61 40 64 (@g@o@ @a@h@e@a@d)

что пошло не так?

0x40 в двоичном виде - это 01000000, что заставляет меня считать, что 1 является своего рода контрольным битом, и он пришел в другой кодировке ...

Ответы [ 2 ]

0 голосов
/ 15 января 2014

Байты 40 62 20 C6 40 62 недействительны utf-8! Проблема в осиротевшем старте C6. C6 находится в двойном 11000110, так что это начальный байт 2-байтовой последовательности (поскольку он начинается с 110, оставшиеся 5 бит являются битами полезной нагрузки кодовой точки, которая равна 110). Но следующий байт для начального байта отсутствует, так что это недопустимая 2-байтовая последовательность! Возможно, байты НЕ являются UTF-кодированными, а C6 является символом ANSI e. г. один персонаж. Однако C6 выше 127 и поэтому не является символом ASCII. Каждый символ выше 127 должен быть декодирован с правильной последовательностью utf-8 при кодировании в utf-8.

0 голосов
/ 06 апреля 2011

Если я правильно понимаю, вы говорите, что полезная нагрузка - это строка предположительно UTF-8 байтов.т.е.

40 62 20 C6 40 62

Но это недопустимый UTF-8.С6 портит его.В UTF-8 недопустимо иметь только один байт> 0x80.Вы можете увидеть это, вставив вышеприведенные (разделенные пробелами байты) в мою маленькую утилиту преобразования. Используйте поле байтов UFT-8)вы используете обнаруживает недействительные данные UTF-8, а затем пытается другой способ их обработки.Ни в одном из стандартных кодировок байт syngle не является C6 вьющейся кавычкой.И C6 недействителен в GSM7bit (http://www.developershome.com/sms/gsmAlphabet.asp).

. Итак, у вас реальная проблема в том, что он там делает?

¡b ¡b
...