Python中UnicodeEncodeError错误:控制台可正常显示字符但写入文件失败如何解决?

我在用 python 下载某个网页里的资料,获取的某一个 str 里面有些字符能正常 print 但是无法写入文件里,报错。 UnicodeEncodeError: 'gbk' codec can't encode character '\xf6' in position 308: illegal multibyte sequence 不知道应该如何解决? 写代码检查这个错误时,代码是这样的:
c = open('a2','w')
print('\xf6')
c.write('\xf6')
c.close()
源文件局部是这样的:
import urllib.request
from bs4 import BeautifulSoup
c = open('c1','w')
d = urllib.request.urlopen('http://www.efloras.org/florataxon.aspx?flora_id=3&taxon_id=200012756')
e = BeautifulSoup(d.read().decode(encoding="utf-8"),"lxml")
c.write(e.find(attrs={'id': 'lblTaxonDesc'}).get_text())
if e.find(attrs={'title': 'Illustration'}):
c.write(str(e.find(attrs={'title': 'Illustration'})))
c.close()

代码里的倒数第二行的 Tab 打不出来。


Python中UnicodeEncodeError错误:控制台可正常显示字符但写入文件失败如何解决?

6 回复

看了你的代码我有种蛋蛋疼的感觉 ignore 可以不?


遇到这种问题,核心是控制台编码(通常是UTF-8)与文件写入时的默认编码不一致。Python在Windows上写入文本文件时,默认编码可能是cp1252gbk,导致无法处理某些Unicode字符。

直接解决方案:在打开文件时,用encoding='utf-8'参数显式指定编码。

# 错误写法:默认编码可能不支持所有Unicode字符
with open('output.txt', 'w') as f:
    f.write("一些特殊字符:café, naïve, 🚀")

# 正确写法:显式指定UTF-8编码
with open('output.txt', 'w', encoding='utf-8') as f:
    f.write("一些特殊字符:café, naïve, 🚀")

如果问题依旧,可能是系统环境变量PYTHONIOENCODING未设置,可以在代码开头强制设置标准流编码:

import sys
import io

# 强制设置标准输出/错误流的编码
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')

# 然后再进行文件写入操作
with open('output.txt', 'w', encoding='utf-8') as f:
    f.write("特殊字符测试:café, 🎉")

关键点

  1. 始终显式指定编码:无论是读取还是写入文件,都加上encoding='utf-8'
  2. 检查数据源:如果字符串来自网络或其他来源,确保在解码时也使用正确编码
  3. 跨平台一致性:在Windows/macOS/Linux之间传递代码时,显式编码能避免大部分问题

一句话建议:文件操作时永远显式指定encoding='utf-8'参数。

open 里加个 encoding=“ utf8 ”,或者直接 error=“ ignore ”
你这估计是 windows 下默认 gbk 打开文件,‘\xf6 ’不在 gbk 编码表里,写不进去的

运行前设置一下这个环境变量
PYTHONIOENCODING=UTF-8

我不是程序员啊,写代码只是为了临时解决某个问题的,这些代码只要调试完没问题,收集完数据了就不再使用了。
我之前想过可以用 ignore,但不知道往哪里插。

open 里加上 encoding=“ utf8 ”解决了问题,非常感谢。

回到顶部