2011-10-01 84 views
2

我不能说得很好,所以我只是说出事实。文件输出到记事本.txt

情况: 我的C++程序输出扩展ascii字符到文本文件。

问题: 当我用记事本打开我的文本文件时,它显示错误的字符。 (我正在使用Windows XP)

结论: 如果我不得不猜测,我会说记事本正在使用错误的编码保存我的文件。有没有办法解决它,所以我的程序将正确的输出保存到文本文件?

代码片段:

char box[] = { 
    201, 205, 187, 
    186, 32, 186, 
    200, 205, 188   
}; 

当我outputFile << box[0],我预期的结果是 “╔”。相反,记事本显示“É”。

预期输出:

╔═════╗ 
║1. ║ 
║  ║ 
║  ║ 
╚═════╝ 

记事本输出:

ÉÍÍÍÍÍ» 
º1. º 
º  º 
º  º 
ÈÍÍÍÍͼ 

编辑:确定。我现在明白我的错误。记事本使用ANSI编码。为什么当我运行我的程序并将它关闭到屏幕时,它显示为“╔”?我正在使用Dev-C++编写我的程序 - 这是否意味着我正在使用过时的编码?有什么方法可以用C++来改变我使用的字符编码吗?

+4

[绝对最小每个软件开发人员绝对肯定必须知道Unicode和字符集(没有借口!)](http://www.joelonsoftware.com/articles/Unicode.html) – GSerg

+0

你看到相同的东西用写字板? –

+6

将您的时间机器设置为1990年,您将成为金色 –

回答

4

您在“扩展ASCII”中使用绘制字符的方框已过时。默认情况下,记事本可能使用Latin-1 (ISO-8859-1)编码,它表示一组不同的字符。

1

这是给你一个“递归”的解决方案:

  • 选择框上方,显示正确的输出,并将其复制到剪贴板
  • 打开记事本
  • 将其粘贴到记事本(它会看起来是正确的)
  • 保存记事本文件(选择Unicode或UTF-8编码),并对其进行分析,找出你需要写来获取输出
什么

我敢肯定,你可以从上面得知,要得到这些字符,你必须写一个Unicode文本文件。

1

更复杂的文本编辑器(如Notepad++)可让您选择编码。 UTF-8会显示您期望的符号。

+0

记事本还允许您选择编码。 – Miguel

+0

保存,是的。但阅读?怎么样? – Dennis

+1

在打开的对话框中,查看打开按钮(在Win7上)的左侧 – Miguel

0

如果你想在编辑器中看到这些线条画字符,你将需要选择Windows 终端字体。