当我在c ++中尝试使用非英语字符的tolower()时,它无法正常工作.我搜索了这个问题,但我发现了一些关于语言环境的内容,但我不确定最佳解决方案.
我的示例代码如下:
printf("%c ",tolower('Ü'));
Run Code Online (Sandbox Code Playgroud)
遗憾的是,标准C++库没有足够的支持来更改所有可能的非英语字符的大小写(就那些具有大小写变体的字符而言).这种限制是由于C++标准假定单个字符及其大小写变体只占用一个char对象(或wchar_t宽字符对象)和非英语字符不能保证为真(这也取决于如何字符编码).
如果您的环境对相关字符使用单字节编码,则可能会提供您想要的内容:
std::cout << std::tolower('Ü', locale());
Run Code Online (Sandbox Code Playgroud)
广泛的角色,你可能会有更多的运气:
std::wcout << std::tolower(L'Ü', locale());
Run Code Online (Sandbox Code Playgroud)
但即使这样也不会给出正确的结果toupper(L'ß'),这将是双字符序列L"SS").
如果您需要支持所有字符,请查看ICU库,特别是有关案例映射的部分