【问题标题】:Why Not Reading Simple Character Through File?为什么不通过文件读取简单字符?
【发布时间】:2013-02-09 09:25:44
【问题描述】:

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



}

【问题讨论】:

  • ☼ 不是 ASCII 字符,它是 unicode character。字符的表示方式取决于文件的编码。
  • 是的,我已经使用 unicode 字符选项保存了文件。但仍然无法正常阅读。
  • 另外,通过使用 unicode big endian、unicode 和 UTF-10 保存文件,我得到了不同的结果

标签: c++ unicode character


【解决方案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。这是因为带有代表0xE2 的签名char 是-30。

正确读取字符的方式也取决于编码。对于 UTF-8,您需要为该字符读取 3 个 char 的数组。对于 UTF-16,您可以使用 char16_t 读取字符。对于 UTF-32,有 char32_t

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2017-01-25
    • 2014-03-08
    • 1970-01-01
    • 2022-08-14
    相关资源
    最近更新 更多