【发布时间】:2023-03-26 15:08:01
【问题描述】:
我在谷歌上搜索了一些,但找不到明确的答案(也许没有使用正确的术语?)
无论如何,我有一些 ANSI 格式 (WCP-1252) 的文本文件,我想在 C++ 程序中处理其字符,但问题是我不知道如何存储对应于十进制的 2 字节字符代码 128 到 255。不过为了确定,我尝试了以下代码:
ifstream infile("textfile.txt");
char c;
infile>>c; //also tried infile.get(c);
cout<<c;
不出所料,1-byte char 未能存储 0x7F 之后扩展集中的任何符号(我认为它只是显示了与第一个字节的值相对应的 ASCII 符号并丢弃了第二个或反之亦然)。
【问题讨论】:
-
Reading 字符实际上并不是问题,但是您正在将它们转换为其他内容(并且“2 字节”建议使用 Unicode)。你是对的:你不能将一个 Unicode 字符存储到一个简单的字符中。请改用
wchar。但是,cout在高 ASCII 字符上失败是另一个(不相关的)问题。 -
我虽然在文件中>>c;会捕获不可打印的内容,但将它们打印出来是另一回事。尝试
cout<<int(c)<<" ";以更有弹性地查看您正在阅读的内容。 -
您确定文件中有两个字节字符吗?除非我感到困惑,否则 WCP-1252 只有 0-255 或单字节的字符。
-
等一下问题编辑。 “第一个字节的值并丢弃第二个”——不可能。 Win-1252 指定一个 ASCII 代码页,所有值都是只有 1 个字符宽。
-
.. 将这段神秘文字的一小段粘贴到您的帖子中。我敢打赌它是 UTF8。
标签: c++ file-io ansi ifstream windows-1252