0

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

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

如果使用 chr() 的常量值,这个是有效的

c = chr(65)   << work
outfile.write(c)

但是,这个不起作用(注意:i 是一个整数变量)

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

它抱怨“UnicodeEncodeError:'charmap'编解码器无法在位置0编码字符'\x81':字符映射到”

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

4

2 回答 2

0

在 Python 3 中,该chr函数返回一个单字符的 Unicode 字符串(一个str实例)。在您的代码中的某个时刻,i正在采用 value 64,当您这样做时,它chr(i+65)会创建 character '\x81'。那是一个控制字符,而不是可以用 ASCII 编码的东西,这就是为什么当你把它写出来时会出错的原因。

有多种方法可以解决此问题,最好的方法在很大程度上取决于您要完成的工作。

第一个解决方案是弄清楚为什么你会获得i价值64并阻止这种情况发生。这可能是一个有range界的错误,或者其他容易修复的错误。

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

于 2015-09-16T06:53:01.793 回答
0

我对输入 i 添加了限制。

我 < 128

现在它工作正常。

感谢大家的帮助。

于 2015-09-17T08:28:53.797 回答