Начните с нескольких вопросов
Как часто ...
- вам нужно написать приложение, которое имеет дело с чем-то, кроме ascii?
- вам нужно написать мультиязычное приложение?
- Вы пишете приложение, в котором имеет для нескольких языков по сравнению с его первой версией?
- Вы слышали, что Unicode используется для представления не-ascii символов?
- Вы читали, что Unicode - это кодировка? Этот Юникод является кодировкой?
- Вы видите людей, которые путают UTF-8-кодированные строки и данные Unicode?
Знаете ли вы разницу между сопоставлением и кодировкой?
Где вы впервые услышали о Unicode?
- В школе? ( действительно )
- на работе?
- в модном блоге?
Вы когда-нибудь за 1039 * юных дней испытывали перемещение исходных файлов из системы в локали A в систему в локали B, редактировали опечатку в системе B, сохраняли файлы, отказываясь от всех -Каждый комментарий и ... в конечном итоге тратить много времени, пытаясь понять, что случилось? (Ваш редактор перепутал вещи? Компилятор? Система? ...?)
Вы в конечном итоге решили, что никогда больше вы прокомментируете свой код, используя не-ascii символы?
Посмотрите, что делается в другом месте
Python
Я упоминал на SO, что я люблю Python? Нет? Ну, я люблю Python.
Но до Python3.0 его поддержка Unicode отстой. И были все те новички-программисты, которые в то время едва знали, как написать цикл, получая UnicodeDecodeError
и UnicodeEncodeError
из ниоткуда при попытке работать с не-ascii символами. Ну, в основном они получили травму жизни от монстра Unicode, и я знаю очень много очень эффективных / опытных кодеров Python, которые до сих пор боятся идеи иметь дело с данными Unicode.
А в Python3 существует четкое разделение между Unicode и bytestrings, но ... посмотрим, насколько сложно переносить приложение из Python 2.x в Python 3.x, если вы ранее не заботились о разделение / если вы не действительно понимаете, что такое Юникод.
Базы данных, PHP
Знаете ли вы популярный коммерческий сайт, который хранит свой международный текст как Unicode?
Вы (возможно) будете удивлены, узнав, что бэкэнд Википедии не хранит свои данные, используя Unicode. Весь текст кодируется в UTF-8 и сохраняется в виде двоичных данных в базе данных.
Одна из ключевых проблем заключается в том, как сортировать текстовые данные, если вы сохраняете их как кодовые точки Unicode. Здесь идет Unicode collations , которые определяют порядок сортировки по кодовым точкам Unicode. Но надлежащая поддержка сопоставлений в базах данных отсутствует / находится в активной разработке. (Вероятно, есть и много проблем с производительностью. - IANADBA) Кроме того, пока нет общепринятого стандарта для сопоставлений: для некоторых языков люди не согласны с тем, как следует сортировать слова / буквы / группы слов.
Вы слышали о нормализации Unicode ? (По сути, вам следует преобразовать данные Unicode в каноническое представление перед их сохранением) Конечно, это важно для хранения базы данных или локальных сравнений. Но PHP, например, обеспечивает поддержку нормализации только с версии 5.2.4, вышедшей в августе 2007 года.
На самом деле, PHP еще не полностью поддерживает Unicode. Придется подождать PHP6, чтобы везде были доступны Unicode-совместимые функции.
Итак, почему не все, что мы делаем в Юникоде?
- Некоторым людям не нужен Юникод.
- Некоторым людям все равно.
- Некоторые люди не понимают, что они будут позже нуждаться в поддержке Unicode.
- Некоторые люди не понимают Unicode.
- Для некоторых других Unicode чем-то похож на доступность для веб-приложений: вы начинаете без, и добавите поддержку для него позже
- Многим популярным библиотекам / языкам / приложениям не хватает надлежащей, полной поддержки Unicode, не говоря уже о проблемах сопоставления и нормализации. И пока все элементы в вашем стеке разработки полностью не поддерживают Unicode, вы не можете написать чистое приложение Unicode.
Интернет явно помогает распространять тренд Юникода. И это хорошо. Инициативы, такие как внесение изменений в Python3, помогают информировать людей об этой проблеме. Но нам придется терпеливо подождать, чтобы увидеть Unicode везде, и новые программисты инстинктивно используют Unicode вместо Strings, где это важно.
Что касается анекдота, поскольку FedEx, по-видимому, не поддерживает международные адреса, все студенты Google Summer of Code '09 попросили Google предоставить только ascii имя и адрес для доставки. Если вы думаете, что большинство бизнес-игроков понимают, что стоит за поддержкой Unicode, вы просто ошибаетесь. FedEx не понимает, а их клиенты на самом деле не заботятся. Тем не менее.