在C++中将宽字符串转换为小写

Nit*_*amk 6 c++ lowercase widestring

如何在C++中将wchar_t字符串从大写转换为小写?

该字符串包含日语,中文,德语和希腊字符的混合.

我想过使用towlower ......

http://msdn.microsoft.com/en-us/library/8h19t214%28VS.80%29.aspx

..但文件说:

towlower的案例转换是特定于语言环境的.只有与当前区域设置相关的字符才会被更改.

编辑:也许我应该描述我在做什么.我收到用户的Unicode搜索查询.它最初采用UTF-8编码,但我将其转换为widechar(我的措辞可能不对).我的调试器(VS2008)在"可变快速监视"中正确显示日语,德语等字符.我需要在Unicode中查看另一组数据并查找搜索字符串的匹配项.虽然当搜索区分大小写时,这对我来说没有问题,但是在不区分大小写的情况下更难以解决问题.我(可能是天真的)解决问题的方法是将所有输入数据和输出数据转换为小写,然后进行比较.

Jon*_*ler 9

如果您的字符串包含所有这些字符,则代码集必须基于Unicode.如果正确实现,Unicode(第4章" 字符属性 ")定义字符属性,包括字符是大写还是小写映射,依此类推.

鉴于前言,towlower()函数from <wctype.h>是正确的工具.如果它不能完成这项工作,您将与您的供应商讨论QoI(实施质量)问题.如果您发现供应商没有响应,请查看备用库.在这种情况下,您可以考虑使用ICU(Unicode的国际组件).

  • 您链接到的文档中指定的Unicode大小写映射仍然部分依赖于语言环境.Quote:"SpecialCasing.txt - 包含映射到多个字符的其他大小写映射,例如"ß"到"SS".还包含依赖于上下文的映射,带有标志以区别于正常映射,以及_some与语言环境相关的映射_." 所以`tolower`不能避免特定于语言环境. (2认同)
  • @Abel:规范化不是一个完整的解决方案.例如,在一些拉丁语言中,变音符号在大写字母上消失,而在其他语言中则不然.除非你知道文本是用哪种语言编写的,否则没有办法告诉.然后,当然,有臭名昭着的土耳其无点"我"问题 - 你想要```小写为`i`和`I`低调为` ı`土耳其语,但你希望`I`小写为`i`任何其他拉丁字母语言. (2认同)