0

所以我有一个我想使用 unicode 的爱尔兰语(盖尔语)单词的列表,以便 RDFlib 能够理解单词中某些字母上方的重​​音。我不知道是在单词在列表中之前还是之后使用 unicode。这是我到目前为止的代码:

文件中的示例行 =00001740 n 3 eintiteas aonán beith 003 ~ 00001930 n 0000

def process_file(self):
    self.file = open("testing_line_ir.txt", "r")
    return self.file

def line_for_loop(self, file):
    for line in file:
        self.myline = unicode(line, 'utf-8')
        for line in self.myline:
        ............here is where other processes are ran.......

这是给出错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe1 in position 26: invalid continuation byte

我也试过这个:

def get_words_list(self, word_part, num_words):
    self.word = word_part[3:3 + num_words:1]
    self.myword = [unicode(i) for i in self.word]
    return self.myword

在这种情况下,'word' 是单词列表 ['eintiteas', 'aonán', 'beith'] 我尝试使用 myword 作为编码列表,但错误与上述相同。

编辑:这是发生错误的源代码,它发生在 graph.parse 行 像 block1 和命名空间一样通过的变量只是文本行

def compose_printout(self, namespaces, block1, block2, close_rdf):
    self.printout += namespaces + block1 + block2 + close_rdf
    self.tabfile = StringIO(self.printout)
    return self.tabfile

def serialize(self, graph, tabfile):
    """ This will serialize with RDFLib """
    graph.parse(tabfile, publicID=None, format="xml")

其中一些词被添加到 RDFlib 图中,所以这里的任何帮助都会很棒!

4

2 回答 2

1

您没有 UTF-8 数据。从异常消息中,我会说您使用的是 Latin-1 编码数据:

>>> print '\xe1'.decode('latin1')
á

您可以使用该codecs.open()函数创建一个文件对象,该对象返回已解码的文件数据:

import codecs

def process_file(self):
    self.file = codecs.open("testing_line_ir.txt", "r", 'latin-1')
    return self.file

def line_for_loop(self, file):
    for line in file:
        # line is *already* unicode
于 2013-07-16T15:02:29.583 回答
-1

您可以在文件头上尝试这些代码

import sys
reload(sys)
sys.setdefaultencoding('utf8')
于 2013-07-16T14:52:45.583 回答