【发布时间】:2012-01-10 13:19:29
【问题描述】:
我有一些现有的 Visual C++ 代码,我需要将宽字符串转换为大写或小写。
我知道这有一些陷阱(例如土耳其语的“I”),但如果您了解该语言,其中大部分都可以解决。幸运的是,在这部分代码中,我知道 LCID 值(区域设置 ID),我猜这与了解语言相同。
由于 LCID 是 Windows 类型,是否有 Windows 函数可以将宽字符串转换为大写或小写?
C 运行时函数 _towupper_l() 听起来很理想,但它需要一个 _locale_t 参数而不是 LCID,所以我猜它是不合适的,除非有一种完全可靠的方法将 LCID 转换为 _locale_t。
【问题讨论】:
-
你不能使用
towupper或towlower吗? -
没有。抱歉,我忘记在我的原始帖子中添加对此的评论。 towupper() 的文档说“towupper 的大小写转换是特定于语言环境的。只有与当前语言环境相关的字符才会更改。没有 _l 后缀的函数使用当前设置的语言环境。这些函数的版本带有_l 后缀将语言环境作为参数并使用它而不是当前设置的语言环境”。 LCID 可能不是当前语言环境,因此您需要使用 _l 版本并传入适用的 _locale_t 以获得使用该语言环境的可靠结果。
标签: windows visual-c++ uppercase lowercase lcid