杰瑞科技汇

Python如何正确读取Unicode文件?

在 Python 中读取 Unicode 文件(如 UTF-8、UTF-16 等编码的文本文件)非常简单,核心要点是 显式指定文件编码,以下是详细说明和示例代码:


关键方法:open() 函数的 encoding 参数

Python 内置的 open() 函数是文件操作的基础,通过 encoding 参数指定文件编码即可正确读取 Unicode 文件。

基本语法

with open('文件路径', 'r', encoding='utf-8') as f:
    content = f.read()

常见编码类型

编码 说明 适用场景
'utf-8' 最通用的 Unicode 编码 推荐默认选择,支持全球语言
'utf-16' 16 位 Unicode 编码 Windows 系统常见
'gbk' 中文常见编码(简体中文) 仅处理中文时使用
'ascii' 英文编码(不支持非 ASCII 字符) 仅纯英文文件

完整示例代码

读取 UTF-8 编码的文件(推荐)

# 假设文件是 UTF-8 编码(最常见)
with open('example.txt', 'r', encoding='utf-8') as f:
    text = f.read()
    print(text)  # 输出文件内容

处理其他编码(如 GBK)

# 读取 GBK 编码的中文文件
with open('chinese.txt', 'r', encoding='gbk') as f:
    text = f.read()
    print(text)

自动检测编码(可选)

如果不确定文件编码,可以使用第三方库 chardet 检测:

import chardet
# 检测文件编码
with open('unknown_encoding.txt', 'rb') as f:
    raw_data = f.read()
    result = chardet.detect(raw_data)
    encoding = result['encoding']
# 用检测到的编码读取
with open('unknown_encoding.txt', 'r', encoding=encoding) as f:
    text = f.read()
    print(text)

常见错误及解决方法

错误 1:未指定编码(Python 3 默认行为)

# 错误示例:未指定 encoding
with open('file.txt', 'r') as f:  # Python 3 会默认使用系统编码(可能出错)
    text = f.read()

问题:如果文件是 UTF-8 而系统默认是 GBK,会抛出 UnicodeDecodeError

解决:始终显式指定 encoding

错误 2:编码不匹配

# 错误示例:文件是 UTF-8,但误用 GBK
with open('file.txt', 'r', encoding='gbk') as f:
    text = f.read()  # 抛出 UnicodeDecodeError

解决:用正确编码打开文件(如 encoding='utf-8')。


逐行读取大文件

对于大文件,建议逐行读取以节省内存:

with open('large_file.txt', 'r', encoding='utf-8') as f:
    for line in f:
        print(line.strip())  # 处理每一行

写入 Unicode 文件

写入时同样需指定编码:

with open('output.txt', 'w', encoding='utf-8') as f:
    f.write("你好,世界!")  # 写入 Unicode 字符

  1. 始终显式指定编码(如 encoding='utf-8')。
  2. 优先使用 UTF-8,除非明确知道其他编码。
  3. 不确定编码时,用 chardet 检测。
  4. 处理大文件时,逐行读取或写入。

遵循这些原则,即可在 Python 中稳定地处理 Unicode 文件。

分享:
扫描分享到社交APP
上一篇
下一篇