如何在输出到文本文件时保持C ++中的字符组合

时间:2014-01-16 02:46:16

标签: c++ windows unicode char ascii

我有一个相当简单的程序,带有一个字符向量,然后输出到.txt文件。

ofstream op ("output.txt");
vector <char> outp;  
for(int i=0;i<outp.size();i++){
    op<<outp[i]; //the final output of this is incorrect
    cout<<outp[i]; //this output is correct
}

op.close();

cout输出的文本是正确的,但是当我打开创建的文本文件时,输出错误,看起来像中文字符,不应该是程序输出的选项。例如,当程序输出时:

  

O dsof

cout输出正确的输出,.txt文件包含:

  

0獤景

我甚至尝试在输出之前将字符添加到字符串中,但它没有帮助。我最好的猜测是字符组合在一起并获得unicode或ascii的不同值,但我不太了解字符代码以确定或如何阻止这种情况发生。有没有办法纠正输出,以便它不这样做?我目前正在使用带有code :: blocks 12.11的Windows 8.1计算机和GNU GCC编译器以防万一。

2 个答案:

答案 0 :(得分:4)

一些文本编辑试图猜测文件的编码,偶尔会弄错。这种情况尤其可能发生在非常少量的文本中,因为正在使用的统计分析只是没有足够的数据来得出一个好的结论。 Window的记事本有一个臭名昭着的例子,文字为"Bush hid the facts"

更高级的文本编辑器(例如Notepad++)可能不会遇到相同的问题,也可能会为您提供更改假设编码的选项。您可以使用它来验证文件的内容是否真正正确。

十六进制编辑器/查看器是另一种方式,因为它们允许您在没有解释的情况下检查文件的原始字节。例如,HxD是我过去使用的十六进制编辑器。

或者,您只需输出更多文字即可。它越多,通常猜错的可能性就越小。根据我的一些经验,换行特别有助于说服文本编辑器采用正确的编码。

答案 1 :(得分:1)

您的代码没有任何问题。

您使用的文本编辑器可能具有默认编码。 使用更高级的编辑器,您将获得正确的输出。