IPA到Arpabet python

时间:2015-11-07 13:51:31

标签: python unicode phonetics

我想做一个简单的替换,如:

line= line.replace ('ʃ',' sh ')
line= line.replace ('ɐ͂',' an ')
line= line.replace ('ẽ',' en ')

问题是python不接受这些字符。

我也尝试过这样的事情:

line= line.replace (u'\u0283',' sh ')

但我仍然无法打开任何内容,因为我收到了解码错误: UnicodeDecodeError:'ascii'编解码器无法解码位置0的字节0xcb:序数不在范围内(128)

我搞乱了编解码器,但是找不到合适的东西,也许我走错了路?

1 个答案:

答案 0 :(得分:2)

您可以在Python中使用非ASCII字符,但您必须使用#coding语句告诉Python源文件的编码。确保将源保存在声明的编码中。使用Unicode进行所有文本处理也是一种好习惯:

#!python2
#coding:utf8
line = u'This is a ʃɐ͂ẽ test'
line = line.replace (u'ʃ',u' sh ')
line = line.replace (u'ɐ͂',u' an ')
line = line.replace (u'ẽ',u' en ')
print line

输出:

This is a  sh  an  en  test

请注意,ɐ实际上是两个Unicode代码点ɐ(U + 0250)和U + 0342 COMBINING GREEK PERISPOMENI的组合代码点。 可以表示为单个代码点U + 1EBD LATIN SMALL LETTER E with TILDE,或者表示为两个代码点U + 0065 LATIN SMALL LETTER E和U + 0303 COMBINING TILDE。为确保使用单个组合代码点或分解字符,可以使用unicodedata模块:

import unicodedata as ud
line = ud.normalize('NFC',line) # combined.
line = ud.normalize('NFD',line) # decomposed.

还有NFKD和NFKC。有关最适合您的详细信息,请参阅Unicode标准。

如果您正在读取文件,请使用io.open并指定文件的编码以自动将输入转换为Unicode:

with io.open('data.txt','r',encoding='utf8') as f:
    with line as f:
        # do something with Unicode line.