我正在从文件'☼'中读取一个字符,按下(ALT + 15)键入记事本中的字符,现在我必须在控制台上打印此字符和值15(此字符的相应ASCII值)。问题是我得到一个ASCII值为-2的方框字符。为什么这不是财产?
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream myFile;
myFile.open("input.txt");
char inputA;
myFile>>inputA;
cout<<inputA<<endl;
cout<<(int)inputA;
}
答案 0 :(得分:1)
☼是一个unicode角色。 unicode字符有各种不同的编码,例如UTF-8,UTF-16和UTF-32。但是,所有编码都需要多个字节来表示字符☼。事实上,陈述是:
UTF-8 0xE2 0x98 0xBC
UTF-16 0x263C
UTF-32 0x0000263C
UTF-16和UTF-32中字节的顺序取决于系统的字节顺序。
您正在尝试将该字符读入单个char
。这只会提取字符的单个字节。我不知道你的-2来自哪里,但当我尝试使用UTF-8编码时,我得到的值为-30。这是因为带有代表char
的签名0xE2
为-30。
如何正确阅读角色,也取决于编码。对于UTF-8,您需要为该字符读取3 char
的数组。对于UTF-16,您可以使用char16_t
来读取字符。对于UTF-32,有char32_t
。