Могу ли я получить одну каноническую строку UTF-8 из строки Unicode? - PullRequest
1 голос
/ 12 ноября 2010

У меня двенадцатилетняя программа для Windows. Как может быть очевидно для знающих, он был разработан для символов ASCII, а не Unicode. Большая часть этого была преобразована, но есть одно место, которое все еще нужно изменить. Однако существует серьезное ограничение: одни и те же ASCII байт последовательность ДОЛЖНЫ создаваться различными кодировщиками, некоторые из которых будут работать не на Windows системы.

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

Таким образом, вопрос заключается в следующем: учитывая строку в Юникоде, можно ли ожидать, что одна каноническая последовательность UTF-8 будет сгенерирована какой-либо соответствующей стандартам реализацией конвертера? Или есть несколько возможностей?

Ответы [ 2 ]

4 голосов
/ 12 ноября 2010

Любая заданная строка Unicode будет иметь только одно представление в UTF-8.

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

Но это не имеет ничего общего с UTF-8, это свойство самого Unicode. Кодирование данного Unicode как UTF-8 - это чисто механический процесс, и он абсолютно обратим.

Правила конвертации здесь: http://en.wikipedia.org/wiki/UTF-8

3 голосов
/ 13 ноября 2010

Как уже сказал Джон, существует только одно представление UTF-8, соответствующее стандартам.

Но самый сложный момент - это соответствие стандартам. Старые кодеры обычно не могут должным образом преобразовать UTF-16 из-за суррогатов. Java - один известный случай тех несоответствующих преобразователей (это произведет две последовательности с 3 байтами вместо одной последовательности с 4 байтами). У MySQL были проблемы до недавнего времени, и я не уверен насчет текущего статуса.

Теперь у вас будут проблемы только с кодовыми точками, которым нужны суррогаты, то есть выше U + FFFF. Если ваше приложение долгое время оставалось без Unicode, это значит, что вам никогда не приходилось перемещать такие «эзотерические» символы: -)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...