Форум: "Основная";
Текущий архив: 2011.04.10;
Скачать: [xml.tar.bz2];
ВнизDelphi 2009/2010 string какой стандарт unicode? Найти похожие ветки
← →
atruhin © (2009-09-06 16:40) [0]Собственно вопрос в теме, нигде не нашел точной ссылки. Вроде UTF16LE, но Windows использует UTF-16 второй версии, т.е. с поддержкой сурогатных пар.
Как Delphi поступает с символами 0xD800—0xDFFF? Что будет при Length(строка с символами 0xD800—0xDFFF), и при отображении этих символами.
← →
Ruzzz (2009-09-06 16:50) [1]http://www.interface.ru/home.asp?artId=20240
http://www.interface.ru/home.asp?artId=20263
http://www.interface.ru/home.asp?artId=20265
← →
atruhin © (2009-09-06 17:27) [2]> [1] Ruzzz (06.09.09 16:50)
Ну и где в этих статьях ответ хоть на один из вопросов?
В принципе вроде сам нашел ответ. Кому интересно:
http://www.jacobthurman.com/?p=30
Там приводится код получения 3 символов из строки начиная с 4:firstUnit := CharToElementIndex(myString, 4);
tempStr := Copy(myString, firstUnit, Length(myString));
numUnits := CharToElementLen(tempStr, 3);
Result := Copy(tempStr, 1, numUnits);
Это действительно так? У кого какие коментарии по данному поводу?
← →
Ruzzz (2009-09-06 17:58) [3]> Ну и где в этих статьях ответ хоть на один из вопросов?
Может я ошибся, но вроде в них читал о том что Delphi поддерживает эти сурогатные пары
← →
TIF © (2009-09-06 23:09) [4]Как раз на днях поднимал подобное обсуждение на "Базарной площади" DelphiKingdom.com... Правда там его потёрли как злостный оффтопик :)
> Вроде UTF16LE, но Windows использует UTF-16 второй версии,
> т.е. с поддержкой сурогатных пар.
Да UTF-16 LE, включая суррогатные пары, то есть полное соответствие с Windows
> Как Delphi поступает с символами 0xD800—0xDFFF?
Правильно составленная суррогатная пара будет отображена на экране в виде соответствущего символа Юникода, неправильно составленная - превратится в два "неопознанных квадратика"
> Что будет при Length(строка с символами 0xD800—0xDFFF)
Каждая суррогатная пара будет считаться за два символа, что несложно проверить. Для вычисления "правильной" длины строки нужно писать свою функцию... Хотя советую посмотреть "Delphi 2009 Handbook" Марко Канту, там есть упоминание каких-то функций для работы с UTF-16, может есть и стандартное решение
← →
atruhin © (2009-09-07 07:08) [5]> [4] TIF © (06.09.09 23:09)
Спасибо. Просто к unicode и Delphi 2009/2010 только присматриваюсь, поэтому проверить не на чем, могу глупость спросить :)).
Вообще, странно получается, перевели строки в юникод, но не сделали стандартных, функций работы со строками. А все привычные Pos, Copy и т.д. работают не с символами а с парами байт.
Вопрос к знатокам: кто как обходит данные вещи? Или просто "забиваете" на существование 4 байтовых символов?
PS. С одной стороны понятно что это редкие вещи, с другой парсинг/модификация строк чаще всего нужен при паботе с внешними файлами, и кто знает что там придет.
← →
Anatoly Podgoretsky © (2009-09-07 09:03) [6]> atruhin (07.09.2009 07:08:05) [5]
Дельфи не имеет своей обработки, используется Виндоус с небольное количество своих, не знаю как про Copy, но POS вроде бы работает.
Согласно справки Виндоус, может устарела, Виндоус работает с подмножеством UTF-16 - UCS2. UTF-32/UCS4 на платформе Виндоус не актуален, вот если будет нормальная работа с Линуксами, то будет и поддержка в Дельфи, смутно про ее поддержку пишут.
← →
Anatoly Podgoretsky © (2009-09-07 09:06) [7]> atruhin (07.09.2009 07:08:05) [5]
Забыл, до 2009 эти функции начинались с префикса ANSI
> function AnsiPos
> Note: This function supports multi-byte character sets (MBCS).
← →
Anatoly Podgoretsky © (2009-09-07 09:12) [8]Поддержка UCS4 есть на уровне преобразования. UCS4StringToWideString
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2011.04.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c