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

时间:2009-10-23 16:37:15

标签: c++ lowercase widestring

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

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

我想过使用拖车......

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

..但文档说:

  

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

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

4 个答案:

答案 0 :(得分:9)

如果您的字符串包含所有这些字符,则代码集必须基于Unicode。如果实施得当,Unicode(第4章'Character Properties')定义了字符属性,包括字符是大写还是小写映射,等等。

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

答案 1 :(得分:3)

你手头有一个讨厌的问题。日语语言环境无法帮助转换德语,反之亦然。有些语言也没有捕获概念(toupper和朋友在这里是无操作的,我想)。那么,你可以将你的字符串分解成同一种语言的单个词块吗?如果可以的话,你可以转换它们并将它们串起来。

答案 2 :(得分:1)

This SO answer显示了如何使用facet处理多个区域设置。如果这是在Windows上,您可以考虑使用win32 API函数,如果您可以使用C ++ .NET(托管C ++),则可以使用符合Unicode的char.ToLowerstring.ToLower函数。 / p>

答案 3 :(得分:0)

_wcslwr_lMSDN)中查看<wchar.h>

您应该能够在每个语言环境的输入上运行该函数。