【发布时间】:2014-05-11 13:30:21
【问题描述】:
我需要使用C++ implementation of PHP's mb_strtoupper function 来模仿维基百科的行为。
我的问题是,我只想为函数提供一个 single UTF-8 字符,即 std::string 的第一个字符。
std::string s("äbcdefg");
mb_strtoupper(s[0]); // this obviously can't work with multi-byte characters
mb_strtoupper('ä'); // works
有没有一种有效的方法来只检测/返回字符串的第一个 UTF-8 字符?
【问题讨论】:
-
除非你有一个库来为你做这件事,否则你最好的选择可能是编写一个函数,通过读取代理字节并编写它来自己读取 UTF-8 字符串的第一个字符转换为单个 32 位整数 - unicode 代码点 - 然后是您的第一个字符。例如,请参阅此答案:stackoverflow.com/questions/2948308/…
-
对字符进行大小写转换(和其他操作)是个坏主意。组合字符和具有 1:many 映射的字符(例如 'ß' => 'SS')会中断
-
完全同意米海。然而,在这种情况下,我需要模仿维基百科的内部行为进行分析,所以这是采取的途径。