Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: MadMax от Октябрь 06, 2010, 18:53



Название: Utf8 в Unicode в русском языке
Отправлено: MadMax от Октябрь 06, 2010, 18:53
Добрый день, уважаемые форумчане!

Занимаюсь сейчас разработкой сетевого сервиса на Qt 4.6, который обслуживает запросы от клиента, написанного на Flash (используется XMLSocket).
По необходимости сервер конвертирует строку запроса в Unicode.
Столкнулся с одной очень неприятной ситуацией - надеюсь Вы мне поможите.
Картина такая:
В целом мой сервис работает "на ура". Однако, если от Flash-клиента приходит строка, содержащая русскую букву "И" (именно большая), перевечти ее корректно в Unicode мы не можем.

Вот код, который выполняет преобразование:

QTextCodec *codec = QTextCodec::codecForName("UTF-8");

// получаем имя пользователя из переменных запроса
strName = request_vars[2];
// непосредственно преобразование в unicode + добавление строки в БД
AddToDB(..., codec->toUnicode(strName.toAscii()), ...);

request_vars - это массив строк (QStringList), который заполняется подстроками из строки запроса. Среди них есть имя пользователя.

Так вот если строка, например, такая: "Ирина", то "рина" конвертируется нормально, а первая буква "И" превращается в ??. :(((

Остальные буквы алфавита не проверял, потому как это пустая трата времени

В чем может быть дело?


Название: Re: Utf8 в Unicode в русском языке
Отправлено: MadMax от Октябрь 06, 2010, 19:19
Прям вообще очень нужно разобраться....


Название: Re: Utf8 в Unicode в русском языке
Отправлено: Авварон от Октябрь 06, 2010, 19:46
Ничего, что ASCII кодировка не содержит символов, кроме латинских?
toUtf8 тогда уже


Название: Re: Utf8 в Unicode в русском языке
Отправлено: MadMax от Октябрь 06, 2010, 19:55
Как-то странно, что Ascii содержит только английские символы....
А даже если так, то как объяснить то что остальные русские символы конвертируются :)


Название: Re: Utf8 в Unicode в русском языке
Отправлено: gogi от Октябрь 07, 2010, 10:17
Как-то странно, что Ascii содержит только английские символы....

Если нужны русские буквы, используйте toLocal8Bit()