Как диагностировать, и отменить (не предотвратить) искажение Unicode - PullRequest
2 голосов
/ 02 июня 2010

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

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

Ответы [ 2 ]

4 голосов
/ 02 июня 2010

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

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

2 голосов
/ 02 июня 2010

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

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

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

...