我想做一个简单的替换,如:
line= line.replace ('ʃ',' sh ')
line= line.replace ('ɐ͂',' an ')
line= line.replace ('ẽ',' en ')
问题是python不接受这些字符。
我也尝试过这样的事情:
line= line.replace (u'\u0283',' sh ')
但我仍然无法打开任何内容,因为我收到了解码错误: UnicodeDecodeError:'ascii'编解码器无法解码位置0的字节0xcb:序数不在范围内(128)
我搞乱了编解码器,但是找不到合适的东西,也许我走错了路?
答案 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.