Ну, оно и раньше так было, но мучались только китайцы с японцами. А с приходом эмотиконов (var unicode_emoticons = "😀😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏"; с этим теперь столкнулись все, и делать вид что UCS-2 - это Unicode уже не выходит.
Ради интереса полез посмотреть в сорцы VK и фейсбука. Ну что, тысячи строк регексов, скан-кодов и if'ов шарашат туда-сюда эти кодпоинты, ради того чтобы юзер мог скопипастить смайлик в поле ввода.
Кто-то отдал месяц своей жизни на смайлики. Закат солнца вручную, привет!
С, Lua и Эрланг хотя бы не делают вид, что строки там поддерживаются. Но, знаете, пользоваться строковыми константами всё-таки иногда бывает удобно...
А, да, и RTL локали еще не забудьте.
UPD: отдельное "спасибо" авторам Han unification, из-за которого юникод потерял задуманное изначально свойство "смысл строки не меняется от локали", и мы имеем GB18030 и Shift-JIS.
This entry was originally posted at http://wizzard.dreamwidth.org/414780.html. It has
Не, ну это, всё же, не совсем так :)
Rust, опять же, использует внутри utf-8 для своих строк.
И посмотрел я на языки, "умеющие" юникод. Почему-то там взятие подстроки может оторвать диакритику какую-нибудь -- очень интуитивное поведение. Да и куча такой лажи везде. Действительно, почти никакой язык программирования штатными способами не умеет в юникод -- только специализированные библиотеки, умеющие решать конкретные проблемы (нормализацию, например).
В сорцах и для хранения/передачи жёстко локаю всё на UTF-8, если язык позволяет. Увы, не всегда такое возможно, так как педерастия древней жабы с прохачиванием UTF-16 из UCS-2 докатилась много до чего, включая ахтунг-версию питона Python 3. Но и здесь хаки компенсируются другими хаками.
А вообще, приличной строковой библиотеки (чтобы и соответствие свежему Unicode CLDR, и разные *-insensitive регэкспы на его базе) я пока ни в одном языке не наблюдал.
В Swift вроде все норм из коробки – http://oleb.net/blog/2014/07/swift-strings/
А вот языков с поддержкой дат пригодной для бизнеса я таки не видел (чтоб год / неделя / день начинались в произвольную дату / день недели / время соответственно).
О, это хорошо
> The String type does not (yet?) come with a method to specify the language to use for collation.
Ну, не всё :)
Но задел хороший.
Причем и ту, и другую систему от альтернтативного способа нормализации немного плющит.
Ну т.е. это я к тому, что никаких смайликов вроде бы не надо, ад ближе, чем кажется.
Edited at 2015-01-02 05:01 pm (UTC)
бгы. 1.0 неюзабелен почти совсем вообще. адекватным он стал кажется с 3.0 или 4.0
> как определено в стандарте (желательно 1.0)
и, ээээ, тут какие-то взаимоисключающие параграфы. тут же не "у эпла появились смайлики, их втащили в юникод", а "в стандарт ввели смайлики, некоторые интеграторы начали их использовать, другим тоже пришлось".
Edited at 2015-01-02 05:34 pm (UTC)
Edited at 2015-01-02 06:19 pm (UTC)
Есличо, я давно был уверен что с текстом в общем случае нельзя работать как с массивом, надо его потоково процессить: совпадает ли строчка с образцом (другой строкой). Ну и так далее. Тогда и охов по поводу того что utf видите ли индексить по [] нельзя не будет.
Этого недостаточно: http://en.wikipedia.org/wiki/Unicode_equivalence#Errors_due_to_normalization_differences
Наша эпоха создаст множество работы археопрограммистам будущего.
Нет в мире такой силы, которая смогла бы продвинуть несовместимый с Юникодом стандарт (см., например, прогрессивную архитектуру Itanium). А совместимый может быть только хуже в плане поднимаемых проблем.
В индустрии нужен фашист с палкой