Traceback (most recent call last): File "D:\PythonAI\WebSpider01.py", line 7, in <module> f.write(resp.read().decode("utf-8")) ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UnicodeEncodeError: 'gbk' codec can't encode character '\xa9' in position 218489: illegal multibyte sequence
时间: 2025-06-30 22:12:47 浏览: 14
### 问题分析
在使用 Python 写入文件时,遇到 `UnicodeEncodeError: 'gbk' codec can't encode character '©' in position ...: illegal multibyte sequence` 错误,通常是因为默认的文件编码格式为 `gbk`(尤其是在 Windows 系统中),而写入的内容包含非 `gbk` 编码支持的字符(如特殊符号 ©、\xa0、\u01b5 等)[^3]。
Python 的 `open()` 函数在打开文件时若未指定编码格式,则会根据系统区域设置选择默认编码。Windows 中文系统下默认使用的是 `gbk` 编码,该编码不支持某些 Unicode 字符。当尝试将这些字符写入文件时,就会引发 `UnicodeEncodeError` 异常[^2]。
### 解决方案
#### 方法一:指定 UTF-8 编码写入文件
最常见且推荐的做法是显式地将文件打开时的编码格式设置为 `utf-8`,以支持所有 Unicode 字符。例如:
```python
with open('output.txt', 'w', encoding='utf-8') as f:
f.write("这是一个包含版权符号的句子 ©")
```
这种方式可以避免大多数因字符集不兼容导致的错误[^5]。
#### 方法二:忽略或替换无法编码的字符
如果希望程序在遇到无法编码的字符时继续运行,可以使用 `errors` 参数来控制如何处理异常字符。常见的选项包括:
- `errors='ignore'`:忽略无法编码的字符。
- `errors='replace'`:用替代字符(通常是 `?` 或 `\ufffd`)代替无法编码的字符。
示例代码如下:
```python
with open('output.txt', 'w', encoding='utf-8', errors='replace') as f:
f.write("这是一个包含特殊字符的句子 \u01b5 \xa0 \xa9")
```
此方法适用于对数据完整性要求不高的场景。
#### 方法三:修改标准输出流的编码
在某些情况下,比如将结果重定向到命令行或日志文件时,错误可能来源于标准输出(`sys.stdout`)的默认编码设置。可以通过以下方式强制将标准输出流编码设置为 `utf-8`:
```python
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
```
添加上述代码后,再执行打印或写入操作即可避免编码错误[^4]。
#### 方法四:确保 JSON 数据正确编码
如果使用 `json.dumps()` 转换数据并写入文件,建议将 `ensure_ascii=False` 与 UTF-8 编码结合使用,同时处理潜在的编码冲突:
```python
import json
data = {"text": "这是一段中文文本 ©"}
with open('data.json', 'w', encoding='utf-8') as f:
f.write(json.dumps(data, ensure_ascii=False))
f.write('\r\n')
```
此方法可确保中文及特殊字符正常写入文件。
---
###
阅读全文
相关推荐



















