From: Igor R. <ru...@gr...> - 2003-04-21 09:42:25
|
Hi Igor, Так как я ковырялся с юникодом довольно много в колорере, то тоже поговорю. MB>> Я бы сделал в новом API только Unicode. Чего мелочиться :) IS> Наверное так лучше всего. Только у Юникода тоже есть свои подводные IS> камни. Вот некотрые из них: IS> 1. Суррогаты: суррогат - это пара 16-битных слов, обозначающих один IS> символ. Предназначены для возможности определения в Юникоде больше, IS> чем 64К символов. По идее это на обработку строк мало влияет, только IS> надо учитывать что не всегда 16 бит = 1 символ. Тут имхо надо решать. Либо делать поддержку суррогатов, либо нет. Имхо нафик они не нужны. Если делать, то можно делать через utf32 - что есть не очень хорошо (четыре байта на символ везде и всегда), но просто. Либо делать ее неявно. Но тогда надо быть готовым ко всякого рода извращениям - типа спец-функций вычисления длины строки (просто arraylen/sizeof(wchar) не пройдет). IS> 2. "Мертвые" и специальные символы - всякие диакритические знаки, IS> которые относятся к предыдущему символу, символы, "переключающие" IS> направление письма и т.п. Эти символы сами не выводятся, но влияют на IS> вывод других. Сюда же относятся модификаторы (точки над ё, тильда над й, итд) Не думаю, что здесь есть проблема. Можно констатировать, что работы как в ворде мы не добьемся (потенциально к любой букве можно пристроить кучу модификаторов - в консоли это не выведется). Тогда просто установить, что каждое знакоместо занимает один юникодный символ. Какой - не важно. IS> 3. При выводе в консоль некоторые символы Юникода занимают два IS> знакоместа, а не одно (например, иероглифы). Поэтому например в IS> редакторе возможно, что длина строки в символах будет меньше ширины IS> экрана. Это то, о чем я говорил. Это называется не символ, а глиф - графическое изображение. Можно составить иероглиф из десяти символов - он и в два знакоместа не влезет. Короче все эти фишки - для графически приклад, направленных на редактирование естесственного текста. Так как наш редактор 'программистский', простого отображения символ->знакоместо хватит с лихвой. IS> Возможно я слишком далеко забегаю вперед, но хотелось бы, чтобы IS> фаргруп хотя бы была в курсе, что такие проблемы существуют :) Там и не такие проблемы существуют. Рекомендую сходить на unicode.org, слить оттуда все технические отчеты, проштудировать их, потом слить сам стандарт юникода и от корки до корки. Но это напрягает :) К слову, стандарт не требует полного его соблюдения. От приложения достаточно явного указания того, какие части стандарта он соблюдает, а какие игнорирует. И если игнорирует, то каким образом. -- Cail |