Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: vipet от Октябрь 29, 2007, 10:00



Название: Как получить представление строки в UTF-8? (простой вопрос)
Отправлено: vipet от Октябрь 29, 2007, 10:00
Вроде простой вопрос, но я че-то не дорубаю.

Дано:

QString s = "Тест";

Вопрос:
Как в s получить "Тест" ?
(так выглядят байты в utf-8 кодировке для слова "Тест")

P.S. Qt 4.3.2

Целиком задача: передать функции, принимающей std::string, строку с содержимым "Тест".
Хочется использовать простой способ как-нибудь с помощью QTextCodec, QString::toUtf8()/toStdString()/toAscii() и т.п., а не вручную перекодировать.


Название: Re: Как получить представление строки в UTF-8? (простой вопрос)
Отправлено: Alexandr Az от Октябрь 29, 2007, 10:34
QString s = "Тест";

Вопрос:
Как в s получить "Тест" ?
(так выглядят байты в utf-8 кодировке для слова "Тест")


Хех. Мдя уж.... Хехе...
хехеееееееее
..ять, сорри.
Вопрос твой звучит так  - как из кодировки UTF сделать абра кадабру... Народ тут наоборот, стараетси чтобы её не было...
А у меня встречный вопрос - в какой кодировке ты хочешь получить РўРµСЃС ??? Вот и ответь для себя.....

Судя по всему, у тебя это 1251, следовательно,
для полного твоего счастья берем с ассистанта
QString string = "Тест";
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
QByteArray encodedString = codec->fromUnicode(string);


Название: Re: Как получить представление строки в UTF-8? (простой вопрос)
Отправлено: vipet от Октябрь 29, 2007, 11:37

Вопрос решился!
По случайности, файл с исходником был сохранен не UTF-8 кодировке (как все исходники проекта), а в Ascii (win1251).
После сохранения в utf8 все заработало как надо!!!!!

И, действительно, можно обходиться без "абракадабры". :)

Хех. Мдя уж.... Хехе...
хехеееееееее
..ять, сорри.
Вопрос твой звучит так  - как из кодировки UTF сделать абра кадабру... Народ тут наоборот, стараетси чтобы её не было...
А у меня встречный вопрос - в какой кодировке ты хочешь получить РўРµСЃС ??? Вот и ответь для себя.....

Судя по всему, у тебя это 1251, следовательно,
для полного твоего счастья берем с ассистанта
QString string = "Тест";
QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
QByteArray encodedString = codec->fromUnicode(string);

Рад, что мой вопрос вызвал столько (надеюсь положительных) эмоций! :)

- Я использую UTF-8
- При старте проги вызывается QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
  Т.е. этот кодек используется при toStdString(), toAscii()
  Вызов toStdString() возвращает строку, которая и нужна! (после сохранения исходника в нужной кодировке)