Страница 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) архитектуры процессора.