Символы за пределами 7-разрядного диапазона ASCII полезны и на английском языке. Кто-нибудь, кто использует ваше программное обеспечение, даже должен написать знак €? Или? Как насчет отличия «резюме» от «резюме»? Вы говорите, что он используется учеными всего мира, у которых могут быть такие имена, как «Йорг» или «Гудмундсдоттир». В научной обстановке полезно говорить о длинах волн, таких как λ, таких единицах, как Å, или углы как Θ, даже на английском языке.
Некоторые из этих символов, такие как «ö», «£» и «€», могут быть доступны в 8-битных кодировках, таких как ISO-8859-1 или Windows-1252, поэтому может показаться, что вы можете просто использовать эти кодировки и делать с ними. Проблема в том, что за пределами этих диапазонов есть символы, которые многие используют очень часто, поэтому в UTF-8 закодировано множество существующих данных. Если ваше программное обеспечение не понимает, что при импорте данных он может интерпретировать символ «£» в UTF-8 как последовательность из двух символов Windows-1252 и отображать его как «Â». Если эта ошибка не обнаруживается достаточно долго, вы можете начать серьезно искажать свои данные, так как многократные пропуски неверного толкования изменяют ваши данные все больше и больше, пока они не станут невосстановимыми.
И хорошо подумать об этих проблемах в начале вашей программы. Поскольку строки имеют тенденцию быть очень низкоуровневой концепцией, пронизанной по всей вашей программе, с множеством предположений о том, как они работают в неявном виде, как они используются, может быть очень сложно и дорого добавить поддержку Unicode в программу позже, если вы даже не задумывались над этим вопросом.
Моя рекомендация состоит в том, чтобы всегда использовать типы и библиотеки типов Unicode, где это возможно, и убедиться, что все ваши тесты (будь то единица, интеграция, регрессия или любые другие типы тестов), которые имеют дело со строками, пытаются передать некоторые Строки Unicode через вашу систему, чтобы они работали и проходили через невредимые.
Если вы не обрабатываете Юникод, то я бы рекомендовал, чтобы все данные, принятые системой, были 7-битными (т. Е. Нет символов за пределами 7-разрядного диапазона US-ASCII). Это поможет избежать проблем с несовместимостью между 8-битными кодировками наследия, такими как семейство ISO-8859 и UTF-8.
«кажется единственной причиной перехода от ASCII к UNICODE для интернационализации» Далеко не верно. Почему вы делаете это заявление? Где вы видели это как единственную причину? –
Я использовал «кажется», потому что я не знаю никакой другой причины. Пожалуйста, просветите меня. – bsruth
Unicode не является аббревиатурой, вы знаете – skaffman