我将选项包含在/utf-8
中visual studio
,将文件保存在 中UTF-8(with BOM)
,并编写了以下代码:
#include <iostream>
int main(int argc, char* argv[]) noexcept
{
std::cout << std::string("привет мир!").size();
}
结果,我得到了 20 号。我明白为什么会发生这种情况,但是如何解决呢?
我将选项包含在/utf-8
中visual studio
,将文件保存在 中UTF-8(with BOM)
,并编写了以下代码:
#include <iostream>
int main(int argc, char* argv[]) noexcept
{
std::cout << std::string("привет мир!").size();
}
结果,我得到了 20 号。我明白为什么会发生这种情况,但是如何解决呢?
根本不要修复。搜索使用 Unicode 的库。
您还可以用手计算长度 - 计算其中的字节数
(byte & 0b11000000) != 0b10000000
。如果字符串包含有效的 UTF-8,则将获取字符串中的代码点数。这通常等于字符数,但在一些棘手的情况下,几个代码点可以编码一个字符。