1

据我了解,不同的语言环境有不同的编码。对于 ICU,我想将 UnicodeString 转换为当前语言环境的编码,然后再转换回来。具体来说,我使用的是 Boost 的 Filesystem 库,该库又使用 Windows 的 UTF-16 或 Linux 的 UTF-8 编码。

有没有办法使用 ICU 或其他库可靠地做到这一点?

4

2 回答 2

2

您可以使用 ICU,但您可能会发现iconv()它足够了,它的设置和操作要简单得多(它是 Posix 的一部分,并且可轻松用于 Windows)。

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

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

也许你会发现我的这篇文章提供了一些背景知识。

于 2011-09-10T14:30:18.223 回答
1

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

于 2011-09-10T14:30:01.130 回答