热门搜索 :
考研考公
您的当前位置:首页正文

python解码后乱码的原因是什么?

2024-07-16 来源:伴沃教育

字符串在Python内部的表示是unicode编码,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘utf-8’),表示将unicode编码的字符串str2转换成utf-8编码。

代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: xulinjie time:2017/10/22
import urllib2

request=urllib2.Request(r'http://nhxy.zjxu.edu.cn/')
RES=urllib2.urlopen(request).read()
RES = RES.decode('gb2312').encode('utf-8')//解决乱码
wfile=open(r'./1.html',r'wb')
wfile.write(RES)
wfile.close()
print RES

如果一个字符串已经是unicode了,再进行解码则将出错,因此通常要对其编码方式是否为unicode进行判断,

isinstance(s, unicode)#用来判断是否为unicode。

最终可靠代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: xulinjie time:2017/10/22
import urllib2

request=urllib2.Request(r'http://nhxy.zjxu.edu.cn/')
RES=urllib2.urlopen(request).read()

if isinstance(RES, unicode):
    RES=RES.encode('utf-8')
else:
    RES=RES.decode('gb2312').encode('utf-8')

wfile=open(r'./1.html',r'wb')
wfile.write(RES)
wfile.close()
print RES

更多Python知识请关注。

伴沃教育还为您提供以下相关内容希望对您有帮助:

为什么python输出是乱码

第一,在解析网页时默认用了unicode,而大部分网站是utf-8格式的,并且解析出来以后任然用了unicode格式输出,所以导致输出的文件乱码。第二,可能是自己的输出的文件格式系统无法识别,所以输出也是乱码。

避免Python乱码陷阱:字符编码详解

乱码现象通常由编码不匹配、缺乏编码信息、非法字符或数据损坏引起。例如,当用UTF-8编码的数据以ISO-8859-1解码时,就会出现乱码,因为两种编码下的字符映射不同。此外,文本中缺失编码标识或包含无法在某种编码下正确表示的字符,也常导致乱码问题。在Python编程中,乱码问题可能出现在文件操作、网络通信和...

执行python脚本出现乱码怎么解决

原因:windows下中文默认的输出编码为gbk ,与脚本中定义的UTF-8不一样,所以出现了解码失败的情况。解决方法:可以先把中文解码为unicode,然后再转化为gbk来解决这个问题。举例:运行结果:

python print中文乱码问题 win10 Python2

因为windows默认的编码方式是GBK,python文件保存时使用了utf-8,在读取时,python使用GBK的编码表去解utf-8编码的字节码,因为GBK与UTF-8编码不兼容,自然出现了乱码问题 解决方法:1.直接使用 u'是' 形式,指明以unicode编码,解码方式会以顶部 #coding定义的编码方式,如果不写,以操作系统当前编码方法...

python中文乱码是怎么一回事?

与字符的位置毫无关系)。这一点曾经引起过争议。因为自从C这类的语言诞生后,语言的语法含义与字符的排列方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。

python 中文乱码问题

乱码原因:因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件。但是windows的本地默认编码是cp936,也就是gbk编码,所以在控制台直接打印utf-8的字符串当然是乱码了。解决方法:在控制台打印的地方用一个转码就ok了,打印的时候这么写:print myname.decode('UTF-8').encode('GBK')...

python命令行输入中文乱码怎么办

原因 中文windows默认的输出编码为gbk ,与脚本中定义的UTF-8不一样,所以出现了解码失败的情况。相关推荐:《Python基础教程》解决方法 有如下两种方法可以解决这个问题 方法一 我们可以通过先把中文解码为unicode,然后再转化为gbk来解决这个问题:修改后运行结果:方法二 当然,我们也可以通过改变cmd命令行...

python中字符串显示为乱码怎么办

显示乱码的主要原因是:字符串编码集问题 其原因详细:Windows 下的字符串编码集为GBK 而我们的Python字符串一般是 UTF-8 代码详情:!/usr/bin/python# coding: utf-8 os_char='gb18030' # 定义转换类型为GB18030 print u"我是字符串" # 直接打印Unicodeprint u"我是字符串".encode(os_char) ...

怎么解决python3乱码问题?

解决 Python3 乱码问题的关键在于正确指定HTTP头文件中的字符编码。通常,字符编码被指定为 ISO-8859-1,中文无法直接表示在HTTP头里。为避免乱码,应通过Content-Disposition的filename参数指定中文文件名。遗憾的是,许多网站和 web 框架采用的是不兼容多语言的方法,尤其是那些最初针对英文网站设计的框架...

python编程 中文 出现乱码问题

这是因为IDLE中使用gbk编码,是ascii扩展字符集。>>> import sys>>> sys.getdefaultencoding()'ascii'解决方法:在IDLE中执行的时候 去掉字符串前面的u字符,也不要加#coding这一行。先import sys,然后reload(sys),再使用sys.setdefaultencoding("utf-8")。然后就可以打印前面带u的字符串了。(这是...

Top