【发布时间】:2021-03-30 13:35:12
【问题描述】:
经过大量搜索后,我开始使用那个奇怪的代码:
ofstream myfile;
string chars = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
myfile.open ("alphabet.txt");
for (int i = 0; i < 66; i+=2) {
myfile << chars[i] <<chars[i+1] << "\n";
}
myfile.close();
但是真的没有办法从 std::string 中得到一个宽字符吗?
【问题讨论】:
-
std::string包含chars,它总是包含chars,它总是包含chars。对于非拉丁字符,一种选择是使用区域编码,例如 KOI8-R,但是随着时间的推移,KOI8-R和其他字符集的使用已被弃用,现代 C++ 实现通常默认使用多字节 UTF-8 来表示非拉丁字符- 拉丁字符,其中每个字符,如“б”,由多字节序列表示。 -
我知道,但是为什么没有内置方法来获取这些字母?!
-
C++库确实有一些类可以在各种编码和Unicode之间进行转码,但是使用起来很别扭,也不是很流行。大多数需要处理 Unicode 的应用程序将使用几个库之一来执行此操作,例如
iconv。 -
@DmitrySokolov 我猜是因为 C++ 早于 Unicode 的广泛采用。
标签: c++ unicode utf-16 stdstring