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

时间:2010-09-08 23:46:38

标签: c++ linux windows unicode cross-platform

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

谢谢,

3 个答案:

答案 0 :(得分:16)

看看ICU

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

在Linux上或具有支持它的标准库中,您将为适当的语言环境获得一个std::locale对象,因为大写转换是特定于语言环境的。将每个UTF-8字符转换为wchar_t,然后在其上调用std::toupper(),然后转换回UTF-8。请注意,生成的字符串可能更长或更短,并且某些连字可能无法正常工作:每个人都不断提起的示例是德语中的ß到Ss。

在Windows上,这种方法将在更少的时间里起作用,因为宽字符是UTF-16,而不是固定宽度的编码(这违反了C ++语言标准,但是也许标准委员会不应该尝试虚张声势微软打破Windows API)。 CLR中有一种ToUpper方法。

使用可移植库(例如ICU)可能会更容易。

还要确保您想要的是大写(大写每个字母)还是标题大写(大写字符串的第一个字母或连字的第一部分)。

相关问题