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

Python 正在将字节写入文件,编码错误,python,encoding,python-3.x,Python,Encoding,Python 3.x,我在Python3.x中有一个写文件的问题,FOR中的write函数是用utf-8编码编写捷克符号。 我是Python新手,但我为“utf-8”编码设置了IDE和.py、.xml文件,我不知道为什么输出文件看起来像这样。 我的代码: -*-编码:utf-8-*- 从lxml导入etree 从io导入字节io 导入系统 导入编解码器 f=open('uzivatelska_prirucka.xml','rb') fo=open('try.xml','wb',1) header='?xml vers

我在Python3.x中有一个写文件的问题,FOR中的write函数是用utf-8编码编写捷克符号。 我是Python新手,但我为“utf-8”编码设置了IDE和.py、.xml文件,我不知道为什么输出文件看起来像这样。 我的代码:

-*-编码:utf-8-*-
从lxml导入etree
从io导入字节io
导入系统
导入编解码器
f=open('uzivatelska_prirucka.xml','rb')
fo=open('try.xml','wb',1)

header='?xml version=“1.0”encoding=“utf-8”?>\n是否需要以二进制模式进行读写??
我认为XML文件是一个简单的文本文件,您可以像使用txt文件一样使用它
另外,您应该知道python的python3.2和更新版本不会对ASCII字符串和UTF字符串造成任何区别
python3.2及更高版本将所有字符串视为unicode字符串,因此无论字符串是否包含非ASCII字符,您都可以在输出文件中写入字符串
此外,我发现无需以二进制模式打开文件以与
lxml.etree
package一起使用

尝试在文本模式下打开文件(在打开模式下去掉
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
假定为
False
并且if
find()
返回
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

享受编码的乐趣;)

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

尝试在文本模式下打开文件(在打开模式下去掉
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
假定为
False
并且if
find()
返回
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

享受编码的乐趣;)

也许可以编写一个合适的开头括号…python3中的
open
函数。有一个
encoding
参数,可以用来避免那些显式转换。f=open('uzivatelska_prirucka.xml','rb',encoding='utf-8'),有一个错误:二进制模式不接受编码参数。您必须在文本模式下打开它,以znamenápouze
'r'
,而不是
'rb
。在python3中可能不需要使用
编解码器
模块。也许可以编写一个合适的开头括号…python3中的
open
函数。有一个
encoding
参数,可以用来避免那些显式转换。f=open('uzivatelska_prirucka.xml','rb',encoding='utf-8'),有一个错误:二进制模式不接受编码参数。您必须在文本模式下打开它,以znamenápouze
'r'
,而不是
'rb
。在Python3中可能不需要使用
编解码器
模块。但是我在将lxml对象写入文件时遇到了问题。(etree.tostring(root,pretty_print=True))返回类型字节,文件中的编码错误。没有lxml是否有其他选择?已解决。我用了xml.etree.ElementTreeOu是的,就是这样。但是我在将lxml对象写入文件时遇到了问题。(etree.tostring(root,pretty_print=True))返回类型字节,文件中的编码错误。没有lxml是否有其他选择?已解决。我使用了xml.etree.ElementTree