Страница 2 из 2

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

Добавлено: 17.08.2009 21:06:35
Mr.Smart
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 в котором данная путаница непоявится.

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

Добавлено: 17.08.2009 23:23:10
Odyssey
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, если не ошибаюсь, обработкой последовательности байтов занимается компилятор.

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

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

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


Все понятно.

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

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

Это критично только если UCS-2/UTF-16 записано в файл либо передаётся по сети от другой системы, а в случае нахождения данного значения в памяти оно всегда будет находится в формате (BE либо LE) архитектуры процессора.