ICU C ++转换编码

时间:2011-09-10 14:20:16

标签: c++ boost unicode locale icu

据我了解,不同的语言环境有不同的编码。使用ICU我想从UnicodeString转换为当前语言环境的编码,然后返回。具体来说,我正在使用Boost的文件系统库,后者又使用Windows的UTF-16或Linux的UTF-8编码。

有没有办法使用ICU或其他库可靠地执行此操作?

2 个答案:

答案 0 :(得分:2)

你可以使用ICU,但你可能会发现iconv()足够了,设置和操作起来要简单得多(它是Posix的一部分,并且很容易在Windows上使用)。

使用任一库,您必须将unicode字符串转换为宽字符串。在iconv()中,该目标称为WCHAR_T。一旦你有一个宽字符,你可以直接在Windows中使用它。

在Linux中,您可以继续使用wcstombs()将宽字符转换为系统的(和语言环境)窄字符多字节编码(不要忘记setlocale(LC_CTYPE, "");),或者,如果您确定需要UTF-8而不是系统编码,您可以直接从原始字符串转换为UTF-8(也可以使用任一库)。

也许你会找到我的this post来提供一些背景知识。

答案 1 :(得分:1)

使用iconv。 http://www.gnu.org/s/libiconv/documentation/libiconv/iconv.1.html 它预先安装在大多数GNU系统上。