将字节写入文件,编码错误

时间:2013-09-02 07:22:11

标签: python encoding python-3.x

我在Python 3.x中遇到了写入文件的问题,FOR中的写入函数正在用utf-8编码编写捷克符号。 我是Python的新手,但我为' utf-8'设置了IDE和.py,.xml文件。编码,我不知道为什么输出文件看起来像那样。 我的代码:

-*- coding: utf-8 -*-
from lxml import etree
from io import BytesIO
import sys
import codecs

f = open('uzivatelska_prirucka.xml','rb')
fo = open('try.xml','wb',1)

header = '?xml version="1.0" encoding="utf-8"?>\n<root\n'
fo.write(bytes(header,'UTF-8'))

some_file_like_object = f
tree = etree.parse(some_file_like_object)
root = tree.getroot() 
node = tree.xpath('/prirucka/body/p');

for a in node:
    for b in a.getiterator():
        if not (b.find('r') is None): 
            text = etree.tostring(b.find('r'))
            fo.write(bytes(str(text),'UTF-8'))

感谢您的帮助和建议

1 个答案:

答案 0 :(得分:1)

是否需要以二进制模式读写? 我认为XML文件是一个简单的文本文件,你可以像txt文件一样使用它 你也应该知道python3.2和更新版本的python在ASCII和UTF字符串之间没有任何区别 python3.2及更高版本将所有字符串视为unicode字符串,因此您可以在输出文件中写入字符串,无论字符串是否包含非ASCII字符
此外,我发现无需以二进制模式打开文件以与lxml.etree

一起使用

尝试以文本模式打开文件(在打开模式下删除b)并查看它是否有效但请记住告诉open使用utf-8编码打开文件

f = open('uzivatelska_prirucka.xml', 'r', encoding='utf-8')
fo = open('try.xml', 'w', 1, encoding='utf-8')

作为旁注,你可以写:

if b.find('r'):  

而不是:

if not (b.find('r') is None):  

因为if子句中的None假设为Falsefind()返回None python本身不会运行if块中的代码并跳转它:

$ python3.3
Python 3.3.1 (default, Apr 17 2013, 22:30:32) 
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print(1) if None else print(0)
0
>>> print(1) if not None else print(0)
1

玩得开心;)