“ASCII”编解码器不能在位置28进行解码字节写入0xAD:顺序不在范围内(128)

问题描述 投票:-2回答:1

我实现了应用,在那里我有一个场景,那就是它正常化之后,但在阅读我收到以下错误的文件读取文件:下面是我的尝试

  def unicodeToAscii(self,s):
        return ''.join(c for c in unicodedata.normalize('NFD',s) if unicodedata.category(c)!='Mn')

def normalizeString(self,s):
        s=self.unicodeToAscii(s.lower().strip())
        s=re.sub(r"([.!?])",r" \1",s)
        s=re.sub(r"([^a-zA-Z.!?])",r" ",s)
        s=re.sub(r"(\s+)",r" ",s).strip()
        return s

dataFile=os.path.join('/home/amit/Downloads/cornell_movie_dialogs_corpus/cornell movie-dialogs corpus','formatted_movie_lines')
print('please wait .. reading a file') 

lines =open(dataFile).read().strip().split('\n')
vocal=Vocabulary()
pairs=[[vocal.normalizeString(unicode(s))for s in pair.split('\t')] for pair in lines]
print('done reading')

错误:

please wait .. reading a file
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-2-4142a7dbef84> in <module>()
    118 lines =open(dataFile).read().strip().split('\n')
    119 vocal=Vocabulary()
--> 120 pairs=[[vocal.normalizeString(unicode(s))for s in pair.split('\t')] for pair in lines]
    121 print('done reading')
    122 

UnicodeDecodeError: 'ascii' codec can't decode byte 0xad in position 28: ordinal not in range(128)
python unicode ascii text-processing
1个回答
0
投票

您正在执行的Unicode范式一切都没有转换成ASCII。它仅仅适用于一个Unicode正常化,这使得确保variant encodings所有人都表达了同样的方式。 (另外,你避免这种对Mn类,所以标准化是不完整的,太)。

对于它的价值,U+00AD是一个连字符,这 - 像绝大多数的Unicode字符 - 不具有相应的纯ASCII字符,尽管你可以用常规的破折号/接近其所负/连字符-。内置'replace'功能将简单地用问号代替它,但:

>>> '\00ad'.encode('ascii', 'replace')
b'?'
© www.soinside.com 2019 - 2024. All rights reserved.