以下流程图中C++代码C++functionX的算法/实现是什么:

(JavaString) --getBytes--> (bytes) --C++functionX--> (C++String)
JavaString内容应尽可能匹配C++String内容(对于JavaString的所有可能值,最好为100%)

[编辑]字节的字节序可以忽略,因为有多种处理方法。

最佳答案

Java:

String original = new String("BANANAS");
byte[] utf8Bytes = original.getBytes("UTF8");
//save the length as a 32 bit integer, then utf8 Bytes to a file

C++:
int32_t tlength;
std::string utf8Bytes;
//load the tlength as a 32 bit integer, then the utf8 bytes from the file
//well, that's easy for UTF8

//to turn that into a utf-18 string in windows
int wlength = MultiByteToWideChar(CP_UTF8, 0, utf8Bytes.c_str(), utf8Bytes.size(), nullptr, 0);
std::wstring result(wlength, '\0');
MultiByteToWideChar(CP_UTF8, 0, utf8Bytes.c_str(), utf8Bytes.size(), &result[0], wlength);
//so that's not hard either

为了在Linux中做到这一点,人们使用了iconv库,该库功能强大,但更难使用。这是一个将UTF8中的std::string转换为UTF32中的std::wstring的函数:http://coliru.stacked-crooked.com/view?id=986a4a07e391213559d4e65acaf231d5-e54ee7a04e4b807da0930236d4cc94dc

09-28 06:36