2

我编写了一个允许日文输入的 GUI,当您转到文件 > 解析时,它会写入文本文件。然后,该文本文件将通过 MeCab 运行,其中在单词之间放置空格。之后应该再次将其写入文本文件,以便可以在另一个 GUI 窗口中显示。

我遇到的问题是它不想将解析后的数据写入文本文件。第一次写没有问题。此外,它将解析的信息打印到 IDLE 也没有问题。这是解析器和错误:

#!/usr/bin/python
# -*- coding: <utf-8> -*-
import sys

import MeCab
import codecs

read_from = open("pholder.txt").read()
mecab = MeCab.Tagger("-Owakati")
output = mecab.parse(read_from)
print output


text = output
write_to = codecs.open("pholder.txt", "w", "utf-8")
write_to.write(text)
write_to.close()

Traceback (most recent call last):
  File "C:\...\mecabSpaces.py", line 16, in <module>
    write_to.write(text)
  File "C:\...\codecs.py", line 691, in write
    return self.writer.write(data)
  File "C:\...\codecs.py", line 351, in write
    data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
4

2 回答 2

4

解析的数据不是 unicode,它是一个字节字符串。

因此,当您尝试将数据写入文件时,它会尝试将其解码为 un​​icode,然后再将其编码utf-8. 由于您的默认编解码器是ascii,但实际上您有utf-8,它会阻塞字节值为 128 或更高的第一个字符。

您应该.decode('utf-8')返回数据,或者使用mecab返回 unicode 数据的方法。

于 2011-10-25T16:07:05.083 回答
0

这是工作代码。感谢 agf 帮助我把头从屁股上拉出来。

#!/usr/bin/python
# -*- coding: <utf-8> -*-
import MeCab

read_from = open("pholder.txt", "r").read()
mecab = MeCab.Tagger("-Owakati")
output = mecab.parse(read_from)
print output

text = output
write_to = open("pholder.txt", "w").write(text)
于 2011-10-26T01:43:26.867 回答