gpt4 book ai didi

c++ towupper() 不转换某些字符

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:50 24 4
gpt4 key购买 nike

我使用 Borland C++ Builder 2009,我的应用程序被翻译成多种语言,包括波兰语。

对于一小部分功能,我使用 towuppper() 将字符串大写,以便在用户首次忽略时强调它。

原始字符串从语言 dll 加载到 utf16 wstring 对象中,我这样转换:

int length = mystring.length() ;
for (int x = 0 ; x < length ; x++)
{
mystring[x] = towupper(mystring[x]);
}

所有这一切都很好,除了波兰语,其中以下句子:“Rozumiem ryzykowność wykonania tej operacji”转换为“ROZUMIEM RYZYKOWNOść WYKONANIA TEJ OPERACJI”而不是“ROZUMIEM RYZYKOWNOŚĆ WYKONANIA TEJ OPERACJI"

(注意单词“ryzykowność”的最后两个字符不会转换)。

这并不是说这个字符没有可用的大写 Unicode 变体。 Unicode 字符 346 可以解决问题。 http://www.fileformat.info/info/unicode/char/015a/index.htm

这是我过时的编译器安装中的过时库的问题还是我遗漏了其他东西?

最佳答案

C++ 标准不需要towupper 的实现来执行 Unicode 大小写转换。即使宽字符串是 Unicode 字符串。即使在一个小写代码点映射到一个大写代码点的情况下也是如此。

此外,towupper 无法执行正确的 Unicode 大小写转换,即使实现支持它也是如此。大小写转换实际上可以改变 Unicode 字符序列中代码点的数量。 towupper 无法做到这一点。

不能依赖 C++ 标准库来处理此类 Unicode 问题。您需要转移到专用的 Unicode 库,例如 ICU。

关于c++ towupper() 不转换某些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41538726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com