为什么不通过文件读取简单字符?

时间:2013-02-09 09:25:44

标签: c++ unicode character

我正在从文件'☼'中读取一个字符,按下(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;



}

1 个答案:

答案 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