Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1294899349
12
2011-01-13 09:15
2011.04.10
Control.Enable := False Но, чтоб визуально не изменился.


2-1294996934
12
2011-01-14 12:22
2011.04.10
Error creating variant or safe array. Из-за чего?


15-1293210445
asd
2010-12-24 20:07
2011.04.10
чо бы почитать для начинающего пользователя


1-1251978398
gosha52
2009-09-03 15:46
2011.04.10
Delphi 2009-2010, утекает память в записях


6-1233550485
vann
2009-02-02 07:54
2011.04.10
Как задать таймаут при определении имени хоста?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский