我尝试将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)后,它应该是字符吗? 为什么不起作用?
答案 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
现在工作正常。
感谢大家的帮助。