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
相关产品推荐
相关产品推荐

