从读写文件看python的编码处理4887王中王鉄算盘奖

来源:http://www.smjxgs.com 作者:王中王鉄算盘 人气:135 发布时间:2019-08-11
摘要:weblogic的web.xml报错----Malformed UTF-8 char, weblogic报错: Malformed UTF-8 char -- is an XML encoding declaration missing   把编码修改成utf8,上传到weblogic就报这错 解决:把编码修改成utf-8的同时用记事本

weblogic的web.xml报错----Malformed UTF-8 char,

weblogic报错:

Malformed UTF-8 char -- is an XML encoding declaration missing

 

把编码修改成utf8,上传到weblogic就报这错

解决:把编码修改成utf-8的同时用记事本打开该xml文件,另存为里选择utf-8编码方式保存

4887王中王鉄算盘奖结果 1

 

UTF-8 char, weblogic报错: Malformed UTF-8 char -- is an XML encoding declaration missing 把编码修改成utf8,上传到weblogic就报这...

weblogic报错:

本文的测试环境:python 2.7

Malformed UTF-8 char -- is an XML encoding declaration missing

注:新手学习笔记

 

 

把编码修改成utf8,上传到weblogic就报这错

当前环境下,直接输入中文,显然会报错

解决:把编码修改成utf-8的同时用记事本打开该xml文件,另存为里选择utf-8编码方式保存

Non-ASCII character 'xe4' in file F:/pythons_environment_files/filecheck.py on line 3

4887王中王鉄算盘奖结果 2

这时候你需要在开头加上

 

# _*_ coding:utf-8

然后,你就可以妥妥的各种print中文了


现在开始读写文件,我们准备了utf-8编码的文件和gb2312编码的文件各一份

(ps:utf-8文件的生成方式,1、txt另存为可以修改编码方式,2、使用notepad 的同学可以直接在编码里面修改)

utf8url = ‘C:UsersAdministratorDesktopUTF-8测试.txt’

file1 = open(utf8url)  #打开文件

到这里,调试发现报错了

IOError: [Errno 2] No such file or directory: 'C:\Users\Administrator\Desktop\UTF-8xe6xb5x8bxe8xafx95.txt'

报错提示文件找不到,但是我们的文件的确是存在的,查看错误信息,发现文件名的编码不正常

处理方式:

方式1:utf8url = u ‘C:\UsersAdministratorDesktop\UTF-8测试.txt’

方式2: file1 = open(utrf8url.decode(‘utf-8’))

注:两种方式从本质上是一样的,将文件名转成unicode字符

继续读取,发现一切正常

 

然后我们换编码是gb2312的文本进行测试

4887王中王鉄算盘奖结果 3

 

gbkurl = u'C:\UsersAdministratorDesktopGBK测试.txt'  #这里我们直接使用转换为unicode的路径,避免出现错误

file2 = open(gbkurl)

print file2.read()

打印结果

GBK�����ı�

虽然没有报错,但是结果显然不是我们想要的,出现了乱码

解决方法:

对读取的结果进行解码操作

print file2.read().decode('gb2312')

观察打印结果

GBK测试文本      #结果一切正常

 

其实,写到这里,对于编码解码我依旧是蒙的

每次都是encode不行,使用decode

utf-8不行换gb2312,总会有一种可行的

 

为了编码这种情况的发生,我进行了如下尝试

代码如下:

s1 = '张三'

s2 = u‘张三’

print s1

print s1.decode('utf-8')

print s1.decode('gb2312')

print s1.encode('utf-8')

print s1.encode('gb2312')

#-------

print s2

print s2.decode('utf-8')

print s2.decode('gb2312')

print s2.encode('utf-8')

print s2.encode('gb2312')

 

哪些可以得到我们想要的结果呢

这些是可以输出的

print s1

print s1.decode('utf-8')

print '----------'

print s2

print s2.encode('utf-8')

print s2.encode('gb2312')

可以看到print s2.encode('gb2312')显示乱码,其他都正常显示

 

我们因此得出结论

1、python环境下,支持显示字符串和unicode字符,只是非utf-8的字符串,会显示乱码

2、unicode字符要转成字符串,需要进行encode编码,具体的编码方式,就得看你想转成什么编码格式的字符串

3、字符串想转成unicode字符,需要进行decode解码,使用什么解码方式,与字符串本身的编码方式一致

eg:utf-8的字符串想解码,就必须使用decode('utf-8')来执行

 

再来思考文件中显示的乱码,乱码其实就是一种不支持的编码方式编码的字符串

你需要解码成unicode字符进行显示,也可以转成utf-8的字符串进行显示

 对s2.encode('gb2312')乱码的修改

s2.encode('gb2312').decode('gb2312')

或者

s2.encode('gb2312').decode('gb2312').encode('utf-8')

 

再者,对于为什么从txt文件读取的字符串是gb2312的编码

我个人的想法是读取操作是把字符串-字节流-字符串,本身并没有改变编码方式

 

各位看官,虽然写的很杂乱很麻烦,但是我对encode和decode深刻理解了,你呢?

本文由4887王中王鉄算盘奖结果发布于王中王鉄算盘,转载请注明出处:从读写文件看python的编码处理4887王中王鉄算盘奖

关键词:

最火资讯