【发布时间】:2016-05-18 23:03:40
【问题描述】:
我正在尝试让我的 C++ 程序同时接受 CP852(Latin 2) 以文本形式在控制台中写入的标志,以及从简单的文本文件加载。 我无法弄清楚默认编码是什么,因为任何一种方式都会给我不同的 ANSI 代码。 我已将 CP 设置为中欧 (DOS) 852 在高级保存选项中。
1) 使用(int)ł 投射给我的号码是136
2) 分配给变量unsigned char sign = 'ł' 并用cout 将其打印在屏幕上给了我数字136
3) 使用“添加监视”控件到包含 ł 的变量,它显示数字 179
4) 从文本文件加载时,再次179,使用这个简单的代码
int x;
FILE* plik;
plik= fopen("Text.txt", "r"); // It contains 2 signs, "oł"
while ((x = fgetc(plik)) != EOF)
{
cout << (char)x;
}
fclose(plik);
输出:“o|”
我的主要问题是,为什么它处理相同的符号(或者我错了?)“ł”一次是 136 而另一次是 179?如何处理这个问题?这样我就无法打印并接受带有比较的符号,因为它们的代码不同,即使文件中的内容与控制台窗口中的内容完全相同。
【问题讨论】:
-
除非您尝试支持 90 年代之前的代码库,否则为什么不使用 Unicode?span>
-
我目前正在编写一个霍夫曼方法文本压缩程序,这就是为什么我的第一个想法是使用适合一个字节的编码。 ANSI 似乎是显而易见的选择,因为我的需求只包括标准字母 + 特定的 Latin2 符号。
-
使用 UTF-8。这是显而易见的选择。如果您不了解字符集是什么,ANSI 将变得一团糟
-
@Mr_Max:在您编写压缩程序时,真的并不重要。霍夫曼编码根据其频率将可变长度代码分配给
ł。源编码真的无关紧要,只要您的压缩器知道如何获取正确的输入标记(即使用 UTF-8,您需要考虑是要压缩字节还是字符)
标签: c++ visual-c++ visual-studio-2015