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 文字には、UTF-8、UTF-16、UTF-32 など、さまざまなエンコーディングがあります。ただし、すべてのエンコーディングでは、文字 ☼ を表すために複数のバイトが必要です。実際、表現は次のとおりです。

UTF-8   0xE2 0x98 0xBC
UTF-16  0x263C
UTF-32  0x0000263C

UTF-16 および UTF-32 のバイトの順序は、システムのエンディアンによって異なります。

文字を単一の に読み込もうとしていますchar。これにより、文字の 1 バイトのみが抽出されます。-2 がどこから来たのかわかりませんが、UTF-8 でエンコードされた ☼ で試してみると、値 -30 が得られます。これは、signed charwith 表現0xE2が -30 であるためです。

文字を正しく読み取る方法は、エンコーディングにも依存します。charUTF-8 の場合、その文字のためだけに 3 の配列を読み取る必要があります。UTF-16 の場合char16_t、文字の読み取りに使用できます。UTF-32 の場合は、char32_t.

于 2013-02-09T10:37:17.483 に答える