ReadXMLFile неверная кодировка

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Re: ReadXMLFile неверная кодировка

Сообщение Mr.Smart » 17.08.2009 21:06:35

Vladimir писал(а):Если я правильно понял, переменные типа string могут содержать как одно так и двух байтовый текст, почему бы не рассмотреть вариант возврата значений в виде string, но в 2-х байтовом виде? Или принципиально использование именно UTF-16?

В спецификации DOM используются толко строки UCS-2/UTF-16. Придставление кодировки UCS-2/UTF-16 в типе String невозможно по одной простой причине. В String конец строки представлен символом #0, а так как в UTF-16 для кодов символов < 0xFF первый байт всегда 0 получается полная путаница. Для предствления UCS-2/UTF-16 есть тип WideString в котором данная путаница непоявится.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: ReadXMLFile неверная кодировка

Сообщение Odyssey » 17.08.2009 23:23:10

Vladimir писал(а):Если я правильно понял, переменные типа string могут содержать как одно так и двух байтовый текст...

Если точнее, переменные типа string могут содержать текст либо в однобайтовой кодировке, либо в UTF-8, в которой кодовые последовательности имеют длину от 1 до 4 байт.

Vladimir писал(а): ... почему бы не рассмотреть вариант возврата значений в виде string, но в 2-х байтовом виде? Или принципиально использование именно UTF-16?

Mr.Smart писал(а):В спецификации DOM используются толко строки UCS-2/UTF-16. Придставление кодировки UCS-2/UTF-16 в типе String невозможно по одной простой причине. В String конец строки представлен символом #0, а так как в UTF-16 для кодов символов < 0xFF первый байт всегда 0 получается полная путаница. Для предствления UCS-2/UTF-16 есть тип WideString в котором данная путаница непоявится.

Кроме того, для USC-2/UTF-16 есть два варианта представления - Big Endian и Little Endian, в зависимости от того, в какой последовательности расположены байты (сначала младший потом старший или наоборот). Поэтому для однозначной конвертации в string пришлось бы либо глобально договариваться, какой из них использовать, либо вставлять дополнительный маркер, обозначающий способ представления. А при представлении через WideString, если не ошибаюсь, обработкой последовательности байтов занимается компилятор.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: ReadXMLFile неверная кодировка

Сообщение Vladimir » 17.08.2009 23:41:37

Я имел в виду возвращать значения в UTF-8, чтобы присвоения в LCL не требовали конвертации для кириллицы, но

Mr.Smart писал(а):В спецификации DOM используются толко строки UCS-2/UTF-16.


Все понятно.
Vladimir
незнакомец
 
Сообщения: 8
Зарегистрирован: 17.08.2009 13:40:45

Re: ReadXMLFile неверная кодировка

Сообщение Mr.Smart » 18.08.2009 09:33:30

Odyssey писал(а):Кроме того, для USC-2/UTF-16 есть два варианта представления - Big Endian и Little Endian, в зависимости от того, в какой последовательности расположены байты (сначала младший потом старший или наоборот). Поэтому для однозначной конвертации в string пришлось бы либо глобально договариваться, какой из них использовать, либо вставлять дополнительный маркер, обозначающий способ представления. А при представлении через WideString, если не ошибаюсь, обработкой последовательности байтов занимается компилятор.

Это критично только если UCS-2/UTF-16 записано в файл либо передаётся по сети от другой системы, а в случае нахождения данного значения в памяти оно всегда будет находится в формате (BE либо LE) архитектуры процессора.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Пред.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

Рейтинг@Mail.ru