Tiger1228CYM 发表于 2022-7-16 13:30:59

关于open()写入Unicode特殊字符时报错

如果你是用open()函数,可能会出现一个问题:
example1.py
char_id = 0
max_id = 2 ** 31 - 1
while True:
    with open("file.txt", "w") as f:
      f.write(chr(char_id))

    char_id += 1

    if char_id > max_id:
      break
运行example1.py,报错如下:
Traceback (most recent call last):
File "D:/Python/Test/openFunction/example1.py", line 5, in <module>
    f.write(chr(char_id))
UnicodeEncodeError: 'gbk' codec can't encode character '\x80' in position 0: illegal multibyte sequence
1.为什么
在Python3速查宝典中,open()的参数如下:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
注意:encoding的默认值为None。
此时,观察错误信息,可以发现Python将这个所谓的None解释成了GBK编码,而chr()是UFT-8编码,write()无法写入Unicode字符。
在Python Shell中输入以下代码(另见open()速查宝典注3):
import locale
locale.getpreferredencoding(False)
返回'cp936'
而cp936对应的编码即为GB2312(GBK的一种)
2.解决办法
指定open()的encoding参数为'utf-8'即可解决
example2.py
char_id = 0
max_id = 2 ** 31 - 1
while True:
    with open("file2.txt", "w", encoding="utf-8") as f:
      f.write(chr(char_id))

    char_id += 1

    if char_id > max_id:
      break
页: [1]
查看完整版本: 关于open()写入Unicode特殊字符时报错