使用libstdc++在字符串、u16string和u32string之间进行转换

5
我发现这个主题 在字符串、u16string和u32string之间进行转换,并且该解决方案(看起来非常出色)仅使用libc++而不是libstdc++才能正常工作。目前,libc++无法使用 - 它很难编译,在Windows上也无法正常工作。
是否有一种方法可以使用C++11和libstdc++在所有平台上进行这些表示之间的转换?
我特别感兴趣的是将u32_string转换为string(utf8)以及反之亦然。

2
将32位Unicode字符串转换为utf8非常简单,只需要大约10行代码。你为什么不能自己写代码呢?将utf8转换为32位Unicode字符串也不是特别困难。这些格式都很简单且有良好的文档说明。 - john
1
我很愿意使用经过验证的库,而不是自己弄乱它。我不知道它是如此简单,但我相信有人在之前已经做过了,所以我很想使用它 - 我非常相信代码可重用性 ;) - Wojciech Danilo
3
始终存在boost.locale。 - Cubbi
为了更容易地调试Unicode文本问题(任何处理文本的程序员都会遇到),最好学习UTF-8和UTF-16编码/解码算法。一旦您学会了Unicode的工作原理,就可以重新评估它们是否值得重用或编写自己的算法。C++标准的Unicode转换函数在locale/codecvt中。 - Andrew Tomazos
2个回答

2

在C++11中,有一种可移植的方法可以通过wstring_convert类来实现。

然而,目前(截至gcc 4.8),似乎libstdc++尚未实现此功能。

同样的情况也适用于:

codecvt<char16_t, char, mbstate_t>.
codecvt<char32_t, char, mbstate_t>.
codecvt_utf8.
codecvt_utf16.
codecvt_utf8_utf16.

事实上,<codecvt>头文件在gcc发行版中仍然不存在。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接