据我了解,不同的语言环境有不同的编码。对于 ICU,我想将 UnicodeString 转换为当前语言环境的编码,然后再转换回来。具体来说,我使用的是 Boost 的 Filesystem 库,该库又使用 Windows 的 UTF-16 或 Linux 的 UTF-8 编码。
有没有办法使用 ICU 或其他库可靠地做到这一点?
您可以使用 ICU,但您可能会发现iconv()
它足够了,它的设置和操作要简单得多(它是 Posix 的一部分,并且可轻松用于 Windows)。
使用任一库,您都必须将 unicode 字符串转换为宽字符串。在iconv()
那个目标被称为WCHAR_T
。一旦你有了一个宽字符,你就可以直接在 Windows 中使用它。
在 Linux 中,您可以继续使用wcstombs()
将宽字符转换为系统(和区域设置)的窄字符多字节编码(不要忘记setlocale(LC_CTYPE, "");
),或者,如果您确定要使用 UTF-8 而不是系统的编码,您可以直接从原始字符串转换为 UTF-8(也可以使用任一库)。
也许你会发现我的这篇文章提供了一些背景知识。
使用 iconv。http://www.gnu.org/s/libiconv/documentation/libiconv/iconv.1.html 它预装在大多数 GNU 系统上。