QString и немецкие умлауты - PullRequest
       6

QString и немецкие умлауты

4 голосов
/ 18 октября 2011

Я работаю с C ++ и QT и у меня проблема с немецкими умлаутами.У меня есть QString типа "wir sind müde" и я хочу изменить его на "wir sind müde", чтобы правильно показывать его в QTextBrowser.

Я пытался сделать это так:

s = s.replace( QChar('ü'), QString("ü"));

Но это не работает.

Также

 s = s.replace( QChar('\u00fc'), QString("ü"))

не работает.

Когда я перебираю все символы строки в цикле, 'ü' - это два символа.

Кто-нибудь может мне помочь?

Ответы [ 2 ]

7 голосов
/ 18 октября 2011

Строки QTF-16.

QString хранит строку из 16-битных QChar, где каждому QChar соответствует один символ Unicode 4.0. (Символы Unicode со значениями кода выше 65535 хранятся с использованием суррогатных пар, то есть двух последовательных символов QChars.)

Так что попробуйте

//if ü is utf-16, see your fileencoding to know this
s.replace("ü", "ü")

//if ü if you are inputting it from an editor in latin1 mode
s.replace(QString::fromLatin1("ü"), "ü");
s.replace(QString::fromUtf8("ü"), "ü"); //there are a bunch of others, just make sure to select the correct one
1 голос
/ 18 октября 2011

В Unicode есть два разных представления ü:

  • Одиночная точка 00FC (ЛАТИНСКОЕ МАЛЕНЬКОЕ ПИСЬМО U С ДИАРЕЗОМ)
  • Последовательность 0075 (LATIN SMALL LETTER U) 0308 (КОМБИНИРУЮЩИЙ ДИАРЕЗИС)

Вы должны проверить оба.

...