在Python 3.4.3中使用ASCII转换时的输出问题

时间:2015-09-16 06:31:33

标签: python file ascii chr

我尝试将ASCII字符写入解码输入的文件库中。

outfile = open ('output','w')

如果使用chr()

的常量值,则此工作正常
c = chr(65)   << work
outfile.write(c)

然而,这个不起作用(注意:我是一个整数变量)

c = chr(i+65)  << not work
outfile.write(c)

它抱怨“UnicodeEncodeError:'charmap'编解码器不能编码位置0的字符'\ x81':字符映射到”

从十进制转换为ASCII,chr(n)后,它应该是字符吗? 为什么不起作用?

2 个答案:

答案 0 :(得分:0)

在Python 3中,chr函数返回一个单字符的Unicode字符串(str实例)。在您的代码中的某个时刻,i会使用值64,当您执行chr(i+65)时会创建字符'\x81'。这是一个控制字符,而不是可以用ASCII编码的东西,这就是你写出来时出错的原因。

有很多方法可以解决这个问题,最好的方法很大程度上取决于你想要实现的目标。

第一个解决方案是弄清楚为什么你得到i 64的值并阻止它发生。这可能是range绑定的一个错误,或者其他一些很容易修复的错误。

如果您确实想要将'\x81'写入您的文件,另一种方法是更改​​您打开文件的方式,指定默认以外的编码(或以二进制模式打开并处理编码)你自己)。您还可以使用bytes构造函数直接从整数创建二进制字符串:bytes((i + 65,))。请注意,参数必须是可迭代的,即使只有一个值。

答案 1 :(得分:0)

我为输入i添加了一个限制。

我&lt; 128

现在工作正常。

感谢大家的帮助。