如何在python中捕获来自不同语言的所有字母?

2024-10-02 12:32:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有来自不同语言的不同文本的语料库。
我想捕捉所有的角色。我使用python2.7和defaultencodingsetting是utf-8
我不知道为什么当我把这个代码用于德语元音变音符时,它会正确地输出德语元音变音符:

'Erd\xC3\xA4pfel'.decode('unicode-escape').encode('latin1').decode('utf-8')    

结果是: Erdäpfel

但是当我使用这个代码时:

^{pr2}$

结果是: Erd÷pfel这是不同的。在

我不熟悉文本挖掘,我知道例如拉丁1编码不包含法语字母,这在我的项目中是不需要的。 我怎样才能把我的语料库中的所有字符串都转换成unicode语言?在

Utf-8根据文档,它包含所有语言,但为什么它不能正确打印德语元音变音,而拉丁1编码却能正确打印?在

PS:unicode转义字符序列中的小写不是大小写。我试过两种方法,结果都一样。


Tags: 代码文本语言角色编码unicodeutf音符
1条回答
网友
1楼 · 发布于 2024-10-02 12:32:28

你已经有了UTF-8编码的数据。在bytestring中没有要转义的字符串字符。您看到的是一个字符串的repr()输出,其中不可打印的ASCII字符显示为转义序列,因为这使得值可以以ASCII安全的方式轻松地复制和传递。您看到的\xc3是一个字节,而不是单独的字符:

>>> 'Erd\xC3\xA4pfel'
'Erd\xc3\xa4pfel'
>>> 'Erd\xC3\xA4pfel'[3]
'\xc3'
>>> 'Erd\xC3\xA4pfel'[4]
'\xa4'
>>> print 'Erd\xC3\xA4pfel'
Erdäpfel

必须使用原始字符串文本或双反斜杠才能实际获得unicode-escape可以处理的转义序列:

^{pr2}$

请注意,该字符串中有一个单独的\反斜杠字符(回显为\\再次转义为)。在

在解释实际的转义序列之后,他unicode-escape将数据解码为拉丁语1,因此最终得到一个Unicode字符串,其中包含字符U+00C3 LATIN CAPITAL LETTER A WITH TILDE。将其编码回拉丁语1字节会再次给您\xC3字节,而您又回到了UTF-8字节。然后解码为UTF-8可以正常工作。在

但是第二次尝试将U+00C3拉丁文大写字母A与颚化符代码点编码为UTF-8,这种编码为字节序列\xc3\x83。将这些字节打印到UTF-8终端将显示Ã字符。另一个字节\xA4变成了U+00A4 CURRENCY SIGN,其中的UTF-8字节序列是\xc2\xa4,打印为¤。在

这里完全不需要解码为unicode-escape。只需将数据保持原样即可。或者,也许,解码为UTF-8以获得unicode对象:

^{3}$

如果您的实际数据(而不是您所做的测试)包含编码UTTF-8的\xhh转义序列,那么不要使用unicode-escape来解码这些序列。使用string-escape得到一个包含UTF-8数据的字节字符串(然后根据需要将其解码为Unicode):

>>> 'Erd\\xc3\\xa4pfel'
'Erd\\xc3\\xa4pfel'
>>> 'Erd\\xc3\\xa4pfel'.decode('string-escape')
'Erd\xc3\xa4pfel'
>>> 'Erd\\xc3\\xa4pfel'.decode('string-escape').decode('utf8')
u'Erd\xe4pfel'
>>> print 'Erd\\xc3\\xa4pfel'.decode('string-escape').decode('utf8')
Erdäpfel

相关问题 更多 >

    热门问题