将字符数组内的UCS-2转换为UTF-8 std :: string

时间:2014-07-17 09:30:05

标签: c++ string unicode utf-8

这是this问题的直接“后续”;我决定将问题分成两部分 - 最初我发布了整个图片,以防止与“YZ问题”再次接近。现在考虑我已经知道了字符编码。

但是我从文件中使用std :: getline读取了一个字符串。这个文件以我知道的格式编码 - 也就是UTF16大端 - 。 但不是“所有”文件都是UTF16(实际上大多数是UTF8),我更喜欢尽可能少的代码复制。

现在我的第一个响应是“只读取字节”和“然后转换为UTF-8”,如果输入已经是UTF-8,则跳过转换。所以我先把它读成std::string(请忽略OpenFilestreams()[file_index]的“ugglyness”);

std::string retString;
if (isValidIndex(file_index) && OpenFilestreams()[file_index]->good()) {
    std::getline(*OpenFilestreams()[file_index], retString);
}
return retString;

在此之后我暂时有一个无意义的字符串 - 因为字节的排序就像字符串是UCS2 / UTF-16一样。那么如何将此std::string转换为另一个std::string,从而导致UTF8字节排序。 - 或者我应该在行读取级别(甚至打开文件流级别?)

我更喜欢保持自己的C ++ 11标准,如果它真的更好(可能已经有靴子,但我的电脑上没有ICU库)可能会提升/ ICU。

0 个答案:

没有答案