7

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

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

我想用towlower...

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

..但文件说:

towlower 的大小写转换是特定于语言环境的。仅更改与当前语言环境相关的字符以防万一。

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

4

4 回答 4

10

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

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

于 2009-10-23T16:50:29.190 回答
3

你手头有一个讨厌的问题。日语语言环境无助于转换德语,反之亦然。有些语言也没有大写的概念(toupper我想朋友们在这里是无用的)。那么,你能把你的字符串分解成来自同一种语言的单独的词块吗?如果可以的话,您可以转换这些片段并将它们串起来。

于 2009-10-23T16:50:01.097 回答
1

这个 SO 答案显示了如何使用构面来处理多个语言环境。如果这是在 Windows 上,您可以考虑使用 win32 API 函数,如果您可以使用 C++.NET(托管 C++),则可以使用char.ToLowerstring.ToLowerUnicode 兼容的函数。

于 2009-10-23T16:53:41.053 回答
0

看看_wcslwr_lMSDN<wchar.h>)。

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

于 2009-10-23T17:00:42.070 回答