Skip to main content
 首页 » 编程设计

Python:用CJKLIB将汉字转成拼音

2025年05月04日12wayfarer

我正在尝试将一堆汉字转换为拼音,从一个文件中读取字符并将拼音写入另一个文件。我正在使用 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 函数时出现错误。如果我按书面方式调用它,

readings = cjk.getReadingForCharacter(c.encode('utf-8'), 'Pinyin') 

我得到:UnicodeDecodeError:“ascii”编解码器无法解码位置 0 中的字节 0xef:序号不在范围内 (128)。

如果我这样调用它,没有 .encoding(),

readings = cjk.getReadingForCharacter(c, 'Pinyin') 

我收到 sqlalchemy 抛出的错误(CJKLIB 使用 sqlalchemy 和 sqlite):你不能使用 8 位字节串,除非你使用可以解释 8 位字节串的 text_factory ...等等。

有人能帮帮我吗?谢谢!

哦还有,中日韩文库有没有办法不带任何声调返回拼音?我认为默认情况下它会返回带有这些奇怪字符的拼音来表示音调,我只想要没有这些音调的字母。

请您参考如下方法:

你的错误是你没有解码输入流,但你正在转身并重新编码它就像它是 UTF-8 一样。这是错误的方式。

你有两个选择。

您可以使用显式编码codecs.open 输入文件,这样当您读取它时,您总是能得到常规的 Unicode 字符串,因为解码是自动的。这始终是我的强烈偏好。不再有文本文件这样的东西。

您的另一种选择是在将二进制字符串传递给函数之前对其进行手动解码。我讨厌这种风格,因为它几乎总是表明你做错了什么,即使它没有做错,它也很笨拙,因为所有人都出去了。

我会对输出文件做同样的事情。我只是讨厌到处看到手动 .encode("utf-8") 和 .decode("utf-8")。设置流编码并完成它。