python open ansi_希望Python创建一个UTF8文件,得到一个ANSI文件。为什么?

我有以下功能:def storeTaggedCorpus(corpus, filename):

corpusFile = codecs.open(filename, mode = 'w', encoding = 'utf-8')

for token in corpus:

tagged_token = '/'.join(str for str in token)

tagged_token = tagged_token.decode('ISO-8859-1')

tagged_token = tagged_token.encode('utf-8')

corpusFile.write(tagged_token)

corpusFile.write(u"\n")

corpusFile.close()

当我执行它时,我得到了以下错误:(...) in storeTaggedCorpus

corpusFile.write(tagged_token)

File "c:\Python26\lib\codecs.py", line 691, in write

return self.writer.write(data)

File "c:\Python26\lib\codecs.py", line 351, in write

data, consumed = self.encode(object, self.errors)

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

所以我去调试它,发现创建的文件被编码为ANSI,而不是在corpusFile = codecs.open(filename, mode = 'w', encoding = 'utf-8')中声明的UTF-8。如果

corpusFile.write(tagged_token)被删除,这个函数(显然)将工作,文件将被编码为ANSI。如果我删除tagged_token = tagged_token.encode('utf-8'),它也可以工作,但是生成的文件将具有编码“ANSI as UTF-8”(???)拉丁字母也会被弄乱。因为我正在分析pt-br文本,这是不可接受的。

我相信如果用UTF-8打开的话,一切都会好起来的,但是我不能让它工作。我在网上搜索过,但是我发现的关于Python/Unicode的所有内容都涉及到其他一些东西……所以为什么这个文件总是以ANSI结尾?我在Windows 7 x64中使用Python 2.6,这些文件编码是从Notepad++通知的。

编辑-关于corpus参数

我不知道corpus字符串的编码。它是由PlaintextCorpusReader.tag()方法从NLTK生成的。根据Notepad++,原始的语料库文件是用UTF-8编码的。这个tagged_token.decode('ISO-8859-1')只是一个猜测。我试着把它解码成cp1252,从ISO-8859-1得到了同样的损坏字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值