据我了解,不同的语言环境有不同的编码。使用ICU我想从UnicodeString转换为当前语言环境的编码,然后返回。具体来说,我正在使用Boost的文件系统库,后者又使用Windows的UTF-16或Linux的UTF-8编码。
有没有办法使用ICU或其他库可靠地执行此操作?
答案 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系统上。