我正在尝试使用GWork(GWEN 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 )
感谢您的时间。