QString���德语umlauts

4

我正在使用C++和QT进行开发,遇到了德语umlauts的问题。我有一个QString字符串,如"wir sind müde",想将其更改为"wir sind müde",以便在QTextBrowser中正确显示。

我尝试了以下方法:

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

但它没有起作用。

同样

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

无法工作。

当我在循环中迭代字符串的所有字符时,'ü'被视为两个字符。

有人能帮我吗?


1
实际上,在替换之前和之后,您的字符串有什么区别?“wir sind müde”和“wir sind müde”。 - Sai Kalyan Kumar Akshinthala
1
我将其更正为"wir sind m'&uuml';de"(不带 ' ')。该网站将其转换为ü,因为它是ü的HTML表示形式。 - punkyduck
2个回答

7

QStrings是UTF-16编码的。

QString存储一串由16位QChars组成的字符串,其中每个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

谢谢!s.replace(QString::fromLatin1("ü"), "ü"); 是有效的。 - punkyduck

1

在Unicode中,有两种不同的表示方法可以表示字母 ü

  • 单点表示法:00FC(带分音符的小写拉丁字母“u”)
  • 序列表示法:0075(小写拉丁字母“u”)0308(组合分音符)

你应该同时检查这两种表示方法。


不需要。在内部,它被存储为两个不同的代码点。请参见我帖子中的引用:“作为代理对存储”。 - RedX
@RedX:这指的是代码点超过65535,但这里不适用。文档没有指定重音字符的表示方式-可能这取决于字符串生成的方式。 - Mike Seymour
你说得对。如果他不确定,他可以使用 normalize() 获取标准化版本。 - RedX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接