2010-06-02 3 views
2

Где-то выше меня, «что-то» произошло, похожее на юникод. Один из симптомов заключается в том, что нижний регистр u umlaut (ü) преобразуется в «¼» (т.е. символ FC преобразуется в C3 BC). Предполагая, что я не контролирую этот процесс восходящего потока, как я могу перепрограммировать то, что происходит? И если это возможно, могу ли я закрутить колбасную машину назад и вернуть исходный текст?Как диагностировать и реверсировать (не предотвратить) Unicode mangling

(Если это помогает понять этот случай, то текст, который я получил, был в виде MySQL дамп. Я думаю, что somwewhere в процессе разгрузки/транспортировки он получил наломать.)

ответ

2

Прежде всего, это выглядит например, вы получили кодированный текст UTF-8 (как вы нашли ü, интерпретируемый в ожидаемой кодировке, возможно, Latin-1).

Вы можете догадаться, что эта кодировка используется, проверяя правильность последовательности байтов (и, конечно, не используемые незаконные). См. the Wikipedia article для справки и поиска действительных и недопустимых последовательностей байтов. Вы можете быть уверены в кодировке, если текст начинается с BOM, но это не обязательно для UTF-8.

Чтобы получить текст обратно в требуемой кодировке, доступно несколько инструментов, GNU recode для одного.

+0

Спасибо - статья Википедии объяснила многое. По сути, у меня была строка (на Java), состоящая из символов, которые каким-то образом пропустили декодирование из UTF-8. Поэтому исправление в конце состояло из замены: x = results.getString ("field"); с x = новая строка (rs.getBytes («поле»), «UTF-8»); Предположительно, я найду более элегантный способ сделать это, но это большой шаг вперед, особенно в моем понимании. Спасибо, оба. –

4

Ваш текст не «искалечен». Это только в UTF8. C3 BC - это то, что ü является предположительно для кодирования как. Просто установите любое программное обеспечение, которое вы используете для UTF8, и вся боль исчезнет. Если вы не можете установить программное обеспечение в Юникод, серьезно подумайте о переходе на более новое программное обеспечение.

Я знаю, что сначала это страшно, но в любом случае вам придется это сделать. Мой любимый музыкальный наборщик переключился на Unicode-only, введенный некоторое время назад (они даже намеренно удалили поддержку старых 8-битных кодовых страниц, чтобы заставить людей переключаться), и я был расстроен, считая, что Latin-1 для меня достаточно хорош, и было глупо ломать материал, который работал отлично, и затем я перебрал его и просто установил emacs в буферы Unicode, и теперь мне больше не придется думать о кодировке символов в моей жизни!

 Смежные вопросы

  • Нет связанных вопросов^_^