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

UTF-8列表单词搜索问题:阿拉伯语单词显示为Unicode转义序列

如何在生成的列表中正确搜索阿拉伯语单词?

嘿,我明白你遇到的问题了——明明文件里有‘الو’这个词,生成的列表里却变成了\xd8\xa7\xd9\x84\xd9\x88这种Unicode转义序列,导致没法直接搜索对吧?这其实是文件编码读取不匹配导致的,我给你两种解决思路:

一、从根源解决:读取文件时指定UTF-8编码

你之前的代码打开文件时没有指定编码,Python会默认使用系统的默认编码(比如Windows上的GBK、Linux上的Latin-1)来读取UTF-8文件,这就把阿拉伯语的UTF-8字节错误解码成了转义序列。只要在open()里加上encoding='utf-8',就能直接读取到正确的字符串:

import itertools

with open('stop_word_Tiba.txt', encoding='utf-8') as f:
    newStopWords = list(itertools.chain(line.split() for line in f))
    newStopWords1d = list(itertools.chain(*newStopWords))

这样生成的newStopWords1d里就会直接显示‘الو’,你直接用'الو' in newStopWords1d就能正常搜索了。

二、如果已经生成了带转义的列表,事后修复搜索

要是你已经有了那个带转义序列的列表,不想重新读取文件,也可以通过编码转换来搜索:

方法1:把目标单词转成对应的转义形式

把你要找的‘الو’转换成和列表里一致的转义字符串:

target_word = 'الو'.encode('utf-8').decode('unicode-escape')
if target_word in newStopWords1d:
    print("找到了!")

方法2:把列表里的元素解码成正确的阿拉伯语字符串

遍历列表,把每个转义序列转换回原始的UTF-8字符串:

decoded_stop_words = [bytes(word, 'latin-1').decode('utf-8') for word in newStopWords1d]
if 'الو' in decoded_stop_words:
    print("找到了!")

简单说下原理:之前错误读取时,Python把UTF-8的字节(比如\xd8\xa7)当成了Latin-1编码的字符,所以每个字节被单独转成了Unicode字符。用bytes(word, 'latin-1')可以把这些字符转回原始字节,再用decode('utf-8')就能得到正确的阿拉伯语单词了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:16:50