【发布时间】:2012-03-29 16:03:41
【问题描述】:
是否有一种可移植的方式将 C 中的 UTF-8 字符串转换为大写?如果没有,Linux 的方法是什么?
【问题讨论】:
是否有一种可移植的方式将 C 中的 UTF-8 字符串转换为大写?如果没有,Linux 的方法是什么?
【问题讨论】:
这样做的可移植方式是使用 Unicode 感知库,例如 ICU。似乎u_strToUpper 可能是您正在寻找的功能。
【讨论】:
glib 有g_utf8_strup()。
【讨论】:
man g_utf8_strup 中得到了 No manual entry for g_utf8_strup,尽管运行 nm /opt/local/lib/libglib-2.0.a | grep g_utf8_strup 证明它就在那里。这实在是太愚蠢了。 FTFSF。
执行此操作的规范方法是使用 wchar_t - 如果您有一个宽字符字符串并使用 towlower/towupper/towctrans 和您的宽字符(如果您的语言环境设置正确,这将起作用)。所以你需要把你的 UTF-8 字符串,转换成一个宽字符的字符串,然后使用这些接受 wchar_t 的函数,然后再转换回来。
这是一个巨大的 PITA,因此您最好使用受支持的开源 Unicode 库,例如 ICU。
【讨论】: