You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将列表中字符串转为UTF-8?分词后乱码问题求助

解决文本分词乱码与编码转换问题

为什么会出现乱码?

从你输出的ÿþp\x00a\x00r\x00t\x00这类内容来看,你的文本文件是UTF-16LE编码(带BOM),但你打开文件时没有指定编码,Python使用了系统默认编码读取,导致把双字节的UTF-16字符拆成了单字节,出现了大量\x00空字节和BOM字符ÿþ。

修正代码解决乱码

修改open()函数,明确指定文件编码为utf-16(Python会自动处理开头的BOM),这样就能正确读取文件内容:

import glob

# 用原始字符串包裹路径,避免反斜杠转义问题
files = glob.glob(r"D:\Pakistan Constitution\*.txt")
documents = []

for file in files:
    # 指定编码为utf-16,解决乱码问题
    with open(file, encoding='utf-16') as f:
        documents.append(f.read())

stoplist = set('for a of the and to in'.split())
texts = [[word for word in document.lower().split() if word not in stoplist] for document in documents]
print(texts)

关于将列表字符串转换为UTF-8编码

在Python中,字符串本身是Unicode编码的内存对象,所谓“转成UTF-8”其实是将Unicode字符串编码为UTF-8格式的字节序列。如果需要把列表里的字符串转成UTF-8字节,可以这样做:

# 将texts中的每个单词转成UTF-8字节
utf8_texts = [[word.encode('utf-8') for word in doc] for doc in texts]

# 如果要保存为UTF-8编码的文件,写入时指定encoding='utf-8'即可
with open("output.txt", "w", encoding='utf-8') as f:
    for doc in texts:
        f.write(' '.join(doc) + '\n')

额外提示

  • 如果不确定文件编码,可以用chardet库检测:先安装pip install chardet,然后读取文件前几个字节检测编码:
    import chardet
    with open(file, 'rb') as f:
        result = chardet.detect(f.read(1000))
        print(result['encoding'])  # 输出文件的编码,比如utf-16le
    

内容的提问来源于stack exchange,提问作者Kumail Abbas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:24:55