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

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

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

http://msdn.microsoft.com/ EN-US /库/ 8h19t214%28VS.80%29.aspx

..但文档说:

  

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

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

有帮助吗?

解决方案

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

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

其他提示

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

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

_wcslwr_l中查看<wchar.h> MSDN )。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top