Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: bigirbis от Сентябрь 14, 2006, 10:13



Название: Qt 4.1.1 => Qfile::readAll()
Отправлено: bigirbis от Сентябрь 14, 2006, 10:13
Кто-нибудь под виндой сталкивался с проблемой:
Код:
QFile f( "text.html" )
if( f.open(.....) )
{
 QString str = QString::fromUtf8( f.readAll() );
}

???
В начале строки после такой операции появляются непечатаемые символы. :(


Название: Qt 4.1.1 => Qfile::readAll()
Отправлено: Admin от Сентябрь 14, 2006, 10:19
очень похоже на то что ты файл открываешь как бинарный
а надо как текстовый


Название: Qt 4.1.1 => Qfile::readAll()
Отправлено: KADABRA от Сентябрь 14, 2006, 10:30
Они появляются там потому, что они там действительно находятся.
В УТФ кодировке виндовские редакторы добавляют в начало файла какои-то идентификатор того, что это УТФ.


Название: Qt 4.1.1 => Qfile::readAll()
Отправлено: bigirbis от Сентябрь 14, 2006, 10:34
To KADABRA
Осилил. Думаю, ты прав. Пересохранил файл в локальную кодировку - все отлично.


Название: Qt 4.1.1 => Qfile::readAll()
Отправлено: noosooth от Сентябрь 14, 2006, 11:29
Это называется Byte Order Mark (BOM).
http://www.unicode.org/faq/utf_bom.html#BOM

Для UTF8 это EF BB BF и, насколько я знаю, используется только в качестве сигнатуры, т.к. порядок байт в UTF8 вроде как всегда один и тот же.
Наличие такой сигнатуры в UTF8 файле необязательно, посему
приличный редактор должен по идее уметь работать и так и эдак.

Насколько я понимаю, в виндовых редакторах эти кодировки обозначаются как:
Unicode (UTF-8 with signature)
Unicode (UTF-8 without signature)