C++ 写入终端输出的UTF-8符号
我一直在试图理解C++ 写入终端输出的UTF-8符号,c++,utf-8,character-encoding,char,C++,Utf 8,Character Encoding,Char,我一直在试图理解操作符的工作原理,终端正在决定如何显示您输入的字节。您将在2字节UTF-8编码的Unicode字符的两个字节之间向它提供一个换行符(std::endl)。与此相反: std::cout << m0 << std::endl; // Prints � std::cout << m1 << std::endl; // Prints � std::cout终端正在确定如何显示正在向其输入的字节。您将在2字节UTF
操作符的工作原理,终端正在决定如何显示您输入的字节。您将在2字节UTF-8编码的Unicode字符的两个字节之间向它提供一个换行符(std::endl
)。与此相反:
std::cout << m0 << std::endl; // Prints �
std::cout << m1 << std::endl; // Prints �
std::cout终端正在确定如何显示正在向其输入的字节。您将在2字节UTF-8编码的Unicode字符的两个字节之间向它提供一个换行符(std::endl
)。与此相反:
std::cout << m0 << std::endl; // Prints �
std::cout << m1 << std::endl; // Prints �
std::cout您正在处理两种不同的类型,unsigned char[]
和unsigned char
。
如果您在t
上执行sizeof
,您会发现它占用了
三个字节,并且strlen(t)
将返回2。另一方面
另一方面,m0
和m1
是单个字符
当您输出无符号字符[]
时,它将转换为
unsigned char*
,流输出所有字节,直到
它遇到一个'\0'
(这是t
中的第三个字节)。什么时候
输出一个无符号字符
,流只输出该字符
字节。因此,在第一行中,输出设备接收
2字节,然后是行的结尾。在最后两项中,它收到
1字节,然后是行的结尾。这个字节,后跟
行尾不是合法的UTF-8字符,因此显示
设备显示了一些指示有错误的信息,
或者它不明白
使用UTF-8(或任何其他多字节编码)时,您可以
无法从字符串中提取单个字节并期望它们
有任何真正的意义。您正在处理两种不同的类型,无符号字符[]
和无符号字符
。
如果您在t
上执行sizeof
,您会发现它占用了
三个字节,并且strlen(t)
将返回2。另一方面
另一方面,m0
和m1
是单个字符
当您输出无符号字符[]
时,它将转换为
unsigned char*
,流输出所有字节,直到
它遇到一个'\0'
(这是t
中的第三个字节)。什么时候
输出一个无符号字符
,流只输出该字符
字节。因此,在第一行中,输出设备接收
2字节,然后是行的结尾。在最后两项中,它收到
1字节,然后是行的结尾。这个字节,后跟
行尾不是合法的UTF-8字符,因此显示
设备显示了一些指示有错误的信息,
或者它不明白
使用UTF-8(或任何其他多字节编码)时,您可以
无法从字符串中提取单个字节并期望它们
有任何实际意义。您需要定义执行此代码的环境您需要定义执行此代码的环境
std::cout << m0 << m1 << std::endl; // Prints ي