最后!我们开始要求所有输入文件都以utf-8编码!这是我们一直希望年做的事情。不幸的是,我们很沮丧,因为我们都没有尝试过,我们大多数人都是Windows程序员,或习惯于操作系统,其中utf-8是唯一真正的选择;两个小组都不知道如何以平台无关的方式阅读utf-8字符串。
所以我们开始研究如何以平台无关的方式处理utf-8,并发现它非常令人困惑(因为Windows)以及我在stackoverflow上找到的其他问题似乎并没有覆盖我们方案或令人困惑。我找到了对https://www.codeproject.com/Articles/38242/Reading-UTF-with-C-streams的引用,我发现它有点令人困惑,并且含有大量的绒毛。
所以有一些假设(必须是真的,或者我们处于GIGO状态)
std::string
必须包含utf-8;不允许转换。我们试图避免使用std::wstring
,如果可以的话,我认为没有理由使用它。我们还试图避免使用任何不使用utf-8编码std::string
的第三方库;使用带有重载函数的自定义字符串并将所有std::string
参数转换为自定义字符串是可以接受的。
有没有办法只使用标准C ++库?最好只是通过使用一个方面来填充全局语言环境,该方面告诉流库只是转换字符串中的文件内容(像往常一样使用自定义分隔符);不允许转换。
此问题仅关于将utf-8文件读入std::string
并将内容存储为utf-8编码字符串。处理Windows API等是一个单独的问题。
C ++ 17可用。
答案 0 :(得分:1)
UTF-8只是遵循特定编码的字节序列。如果您将合法UTF-8数据的字节序列读入std::string
,则该字符串包含UTF-8数据。
要实现这一目标,你真的没什么特别的。这与任何其他C或C ++文件加载一样。只是不要乱用iostream语言环境,你会没事的。