【发布时间】:2017-05-23 03:58:30
【问题描述】:
我使用 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 tejoperacji”转换为“ROZUMIEM RYZYKOWNOść WYKONANIA TEJ OPERACJI”而不是“ROZUMIEM RYZYKOWNOŚĆ WYKONANIA TEJ OPERACJI"
(请注意单词“ryzykowność”的最后两个字符不会转换)。
似乎没有此字符的大写 Unicode 变体可用。 Unicode 字符 346 可以解决问题。 http://www.fileformat.info/info/unicode/char/015a/index.htm
这是我过时的编译器安装中的过时库的问题,还是我遗漏了其他东西?
【问题讨论】:
-
这些字符是规范化的,还是由多个组合代码单元组成?
-
它不应该是一个过时的库,因为
ś和Ś都存在于 Unicode v.1.1,日期为 1993 年。如果是,则此函数的创建者有错误。 -
您的 C 语言环境设置为什么? “如果当前 C 语言环境中没有列出大写版本,则 ch 的大写版本或未修改的 ch。” 你在 unicode 语言环境中吗?
std::setlocale(LC_ALL, "en_US.utf8");?来自en.cppreference.com/w/cpp/string/wide/towupper 一些易于阅读的关于通过 google 找到的函数的文档。如果这不能解决问题,请提供minimal reproducible example -
现在为什么要使用 Borland?
-
@nikau6:好吧,为什么不呢? CBuilder 有自己的与 Windows 接口的版本,但对于其余部分,它只是另一个 C++ IDE。
标签: c++ c++builder unicode-string