gpt4 book ai didi

c++ 文字 u8 和 BOM(字节顺序掩码)

转载 作者:行者123 更新时间:2023-11-30 03:51:26 24 4
gpt4 key购买 nike

我决定写一个简单的例子:

#include <iostream>

int main()
{
std::cout << u8"это строка6" << std::endl;
return 0;
}

在控制台执行以下命令:chcp 65001

程序输出:

��то строка6

为什么第一个字符显示不正确?我认为代码页 65001 使用 BOM,并将第一个符号读取为 BOM。这是真的吗?

最佳答案

嗯,整个标准 IO 库在该代码页上都是狡猾的。这是另一个测试程序(\xe2\x86\x92是UTF-8中的箭头):

#include <stdio.h>

int main(void)
{
char s[] = "\xe2\x86\x92 a \xe2\x86\x92 b\n";
int l = (int) sizeof(s) - 1;
int wr = fwrite(s, 1, l, stdout);
printf("%d/%d written\n", wr, l);
return 0;
}

及其输出:

��� a → b
10/12 written

请注意,第一个字符再次被 ���� 替换(在 UTF-8 中为 3 个字节),fwrite 调用返回 字符写在控制台上。这违反了 C 标准(它应该返回 bytes 的数量),并且它会破坏每个正确使用 fwrite 或相关函数的程序(例如,尝试打印 "☺☺ ☺☺☺☺☺☺☺☺☺☺” 使用 Python 3.4)。

因此,可靠地输出 Unicode 文本的唯一选项是特定于 Windows 的(除非这些问题已在最新版本的 MSVC 中得到修复):

关于c++ 文字 u8 和 BOM(字节顺序掩码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31263088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com