0

我正在从文件“☼”中读取一个字符,这个字符是通过按(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;



}
4

1 回答 1

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,您需要char为该字符读取一个 3 的数组。对于 UTF-16,可以char16_t用来读取一个字符。对于 UTF-32,有char32_t.

于 2013-02-09T10:37:17.483 回答