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

output issue when using ASCII convertion in Python 3.4.3

我尝试根据解码输入将 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' codec can't encode character '\x81' in position 0: character maps to "

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

在Python3中,chr函数returns一个单字符的Unicode字符串(一个str实例)。在您的代码中的某个时刻,i 取值 64,当您执行 chr(i+65) 时,它会创建字符 '\x81'。那是一个控制字符,不是可以用ASCII编码的东西,这就是为什么你写出来的时候会出错。

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

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

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

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

我 < 128

现在可以正常使用了。

感谢大家的帮助。