使用UTF8-CPP(非codecvt代码!)在UTF8和UTF16之间进行C ++来回转换

时间:2014-03-15 22:49:59

标签: c++ gcc c++11 utf-8 utf-16

我正在尝试使用GWorkGWEN GUI的一个分支)来编译GCC,我需要能够转换交叉转换UTF-8和UTF-16字符串。我已经找到UTF8-CPP库,到目前为止它看起来很完美。

查看UTF8-CPP示例,我注意到它使用了std :: vector< unsigned short>作为UTF-16字符串的存储。

#include <string>
#include <vector>
#include "utf8.h"

std::string nstr = "...";

std::vector< unsigned short > wstrvec;
utf8::utf8to16(nstr.begin(), nstr.end(), std::back_inserter(wstrvec));

std::string utf8str;
utf8::utf16to8(wstrvec.begin(), wstrvec.end(), back_inserter(utf8str));

所以现在在我的Utf8To16()函数中,我必须使用以下命令将矢量wstrvec复制到std :: wstring:

return std::wstring(wstrvec.begin(), wstrvec.end());

在我的Utf16To8()函数中,我必须将数据从std :: wstring复制到std :: vector&lt; unsigned short&gt;然后用它进行转换。

这看起来浪费了内存和计算时间(并不重要),但我甚至不确定它是否安全。

所以我的问题是:我可以直接使用std :: wstring和UTF8-CPP转换函数而不是std :: vector&lt; unsigned short&gt; ?

我真的很喜欢字符编码因为我没有使用超过ASCII。但是从我到目前为止所读到的内容来看,std :: wstring使用wchar_t来存储字符,而wchar_t在每个平台上都有不同的大小。这就是为什么我甚至不确定我当前的实现是否可以安全使用。

我正试图远离codecvt,因为它在GCC中不可用,解决方案必须是跨平台的。

我正在使用MinGW GCC 4.8.2,可以使用C ++ 11。 (除了codecvt

感谢您的时间。

0 个答案:

没有答案