将UTF-8字符转换为大写/小写C++

问题描述:

我有一个包含UTF-8字符的字符串,并且我有一个方法可以将每个字符转换为大写或小写,这很容易通过字符与ASCII重叠,显然有些字符不能转换,例如任何汉字。然而,是否有一种检测和转换可以是上/下的其他字符的好方法,例如,所有的希腊人物?另请注意,我需要能够在Windows和Linux上执行此操作。将UTF-8字符转换为大写/小写C++

谢谢

+0

为了得到一个有用的答案,在这里弄清术语是很重要的。 UTF-8是RFC 3629(和别处)中指定的字符编码;它包含用于在unicode字符和可移植地表示这些字符的八位字节序列之间进行映射的算法。请确定类型;甚至更好,显示包含声明和类型的代码。 – 2010-09-08 23:53:51

+1

格雷格你的评论对我来说没有任何意义,对不起,但我没有任何代码但我试图弄清楚如何做某件事,而不是试图调试那些不正确工作的东西,这样对我来说没有意义,也我知道UTF-8是一种编码,但这并不能改变我想要实现的目标,它是从“a” - >“A”或从“Ω” - >“ω” – NSA 2010-09-09 00:29:40

+0

目的是什么?你打算用它来比较这些处理过的字符串吗?我假设你确实想用它来比较。你是否意识到这不会处理像“ß”和“ss”在德语中相同的东西? – wilx 2010-09-09 10:10:00

看一看ICU

请注意,小写字母到大写字母的功能与语言环境有关。想想得到“无点小写我”的土耳其语(ascii)字母I和(ascii)我得到“带点的大写字母I”。

+0

非常感谢Alexandre提示,但是我没有将这个应用程序链接到任何第三方库。所以我需要弄清楚如何在使用该库的情况下执行此操作。 – NSA 2010-09-09 00:30:58

+0

我建议你编写自己的案例映射工具,查看http://www.unicode.org/faq/casemap_charprop.html。从那里你可以下载所有的特殊情况映射。 – tidwall 2010-09-09 00:49:34

+2

C++没有任何Unicode支持。 ICU是*要走的路。 – 2010-09-09 08:37:17

假设您有权访问wctype.h,然后将您的文本转换为2字节的unicode字符串并使用towupper()。然后将其转换回UTF-8。

+1

或使用ICU亚历山大提到。 – tidwall 2010-09-08 23:55:51

+1

你不这样处理德国ß和希腊终端西格玛。 – 2010-09-08 23:58:19

+0

@Alexandre C .:是否正确转换的字符完全取决于当前的语言环境。 – caf 2010-09-09 06:49:47