这是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。