gpt4 book ai didi

c++ - UTF-8 符号写入终端输出

转载 作者:行者123 更新时间:2023-11-27 23:02:28 25 4
gpt4 key购买 nike

我一直在努力理解 operator<< 的工作原理的 std::cout在 C++ 中。我发现它会打印 UTF-8 符号,例如:简单的程序是:

#include <iostream>

unsigned char t[] = "ي";
unsigned char m0 = t[0];
unsigned char m1 = t[1];

int main()
{
std::cout << t << std::endl; // Prints ي
std::cout << (int)t[0] << std::endl; // Prints 217
std::cout << (int)t[1] << std::endl; // Prints 138
std::cout << m0 << std::endl; // Prints �
std::cout << m1 << std::endl; // Prints �
}

DEMO

产生输出的终端如何确定它必须解释t作为单个符号 ي , 但不是两个符号 � �

最佳答案

您正在处理两种不同的类型,unsigned char[]unsigned char。如果你在 t 上做 sizeof,你会发现它占用了三个字节,strlen( t ) 将返回 2。 另一方面hand,m0m1 是单个字符。

当你输出一个 unsigned char[] 时,它被转换成一个unsigned char*,流输出所有字节直到它遇到 '\0'(这是 t 中的第三个字节)。什么时候你输出一个unsigned char,流输出就是那个字节。所以在你的第一行,输出设备接收2个字节,然后是行尾。在最后两个中,它收到1个字节,然后是行尾。那个字节,其次是行尾,不是合法的 UTF-8 字符,所以显示设备显示一些东西来表明有错误,或者它不理解。

使用 UTF-8(或任何其他多字节编码)时,您无法从字符串中提取单个字节并期望它们有任何实际意义。

关于c++ - UTF-8 符号写入终端输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26411362/

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