我试着把一堆汉字转换成拼音,从一个文件中读出汉字,然后把拼音写进另一个文件。我正在使用CJKLIB函数来完成此操作。在
这是密码
from cjklib.characterlookup import CharacterLookup
source_file = 'cities_test.txt'
dest_file = 'output.txt'
s = open(source_file, 'r')
d = open(dest_file, 'w')
cjk = CharacterLookup('T')
for line in s:
p = line.split('\t')
for p_shard in p:
for c in p_shard:
readings = cjk.getReadingForCharacter(c.encode('utf-8'), 'Pinyin')
d.write(readings[0].encode('utf-8'))
d.write('\t')
d.write('\n')
s.close()
d.close()
我的问题是我一直遇到与Unicode相关的错误,当我调用getReadingForCharacter
函数时,就会出现错误。如果我按原样说的话
我得到:UnicodeDecodeError:'ascii'编解码器无法解码0位置的字节0xef:序号不在范围(128)。在
如果我这样称呼它,没有.encoding()
readings = cjk.getReadingForCharacter(c, 'Pinyin')
我得到了一个由sqlalchemy抛出的错误(CJKLIB使用sqlalchemy和sqlite):除非使用能够解释8位bytestrings的文本工厂,否则不能使用8位bytestrings。。。等等
有人能帮我吗?谢谢!在
哦,还有没有办法让CJKLIB不带任何音调地返回拼音?我想在默认情况下,它会用这些奇怪的字符返回拼音来表示音调,我只希望字母没有这些音调。在
你的错误是你没有解码输入流,但你却在转身,把它重新编码,就好像它是UTF-8一样。那是走错了路。在
你有两个选择。在
您可以
codecs.open
使用显式编码的输入文件,这样每当您从中读取时,总是会得到常规的Unicode字符串,因为解码是自动的。这一直是我强烈的偏好。再也没有文本文件了。在另一种选择是在将二进制字符串传递给函数之前手动解码它。我讨厌这种风格,因为它几乎总是表明你做错了什么,即使它没有,它也很笨拙,因为大家都出去了。在
我会对输出文件做同样的事情。我只是讨厌看到到处都是}。设置流编码并完成它。在
.encode("utf-8")
和{相关问题 更多 >
编程相关推荐