我一直在解析一些带有特殊字符(捷克语字母)的docx文件(UTF-8编码的XML).当我尝试输出到stdout时,一切顺利,但我无法将数据输出到文件,
回溯(最近一次调用最后一次):
文件"./test.py",第360行,
inile.write(u'\ t\t\t\t\t\t \n \n')
UnicodeEncodeError:'ascii'编解码器不能编码位置37的字符u'\ xed':序数不在范围内(128)
虽然我明确地将word变量转换为unicode类型(type(word)返回unicode),但我试图对它进行编码,.encode('utf-8)我仍然坚持这个错误.
以下是现在看到的代码示例:
for word in word_list:
word = unicode(word)
#...
ofile.write(u'\t\t\t\t\t<feat att="writtenForm" val="'+word+u'"/>\n')
#...
Run Code Online (Sandbox Code Playgroud)
我也尝试过以下方法:
for word in word_list:
word = word.encode('utf-8')
#...
ofile.write(u'\t\t\t\t\t<feat att="writtenForm" val="'+word+u'"/>\n')
#...
Run Code Online (Sandbox Code Playgroud)
即使是这两者的组合:
word = unicode(word)
word = word.encode('utf-8')
Run Code Online (Sandbox Code Playgroud)
我有点绝望,所以我甚至试图编码里面的单词变量 ofile.write()
ofile.write(u'\t\t\t\t\t<feat att="writtenForm" val="'+word.encode('utf-8')+u'"/>\n')
Run Code Online (Sandbox Code Playgroud)
我很欣赏任何我做错的提示.
phi*_*hag 11
ofile是一个字节流,你正在写一个字符串.因此,它会尝试通过编码为字节字符串来处理您的错误.这通常只对ASCII字符安全.由于word包含非ASCII字符,因此失败:
>>> open('/dev/null', 'wb').write(u'ä')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in position 0:
ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
请ofile用打开文件的文本流io.open,具有模式一样'wt',而在明确编码:
>>> import io
>>> io.open('/dev/null', 'wt', encoding='utf-8').write(u'ä')
1L
Run Code Online (Sandbox Code Playgroud)
或者,您也可以使用codecs.open几乎相同的界面,或手动编码所有字符串encode.
| 归档时间: |
|
| 查看次数: |
18240 次 |
| 最近记录: |