您的当前位置:首页正文

python如何解决中文乱码问题

2024-08-01 来源:骅佗教育

1、demo.py 文件和编码声明都为 GBK

这种方法比较笨,就是把 demo.py 文件改为 GBK 存储,而且编码声明也是GBK,个人不推荐。

python学习网,大量的免费,欢迎在线学习!

# encoding:gbk
s = "中文"
print s
print repr(s)

2、中文用 unicode 表示

只要在中文前面加上个小u标记,后面的中文就用 unicode 存储了。

# encoding:utf-8
s = u"中文"
print s
print repr(s)

cmd 下是可以打印 unicode 字符的,如下:

相关推荐:《》

3、把中文强制转换为GBK或者unicode编码

强制转换为unicode编码,在 Python 中编码是可以互相转换的,比如从utf-8转换为gbk,不同编码之间不能直接转换,需要通过unicode字符集中间过渡下,从上面基础知识可知unicode是一种字符集,不属于编码,而utf-8是具体实现unicode思想的一种编码。utf-8转换为unicode是一种解码过程,通过decode可从utf-8解码成unicode。

# encoding:utf-8
s = "中文"
u = s.decode('utf-8')
print u
print type(u)
print repr(u)

强制转换为gbk编码,上一步已经从utf-8转换为unicode了,从unicode是编码的过程,通过encode实现。

# encoding:utf-8
s = "中文"
u = s.decode('utf-8')
g = u.encode('gbk')
print g
print type(g)
print repr(g)

总结

windows cmd 窗口下不支持utf-8,想要显示中文必须转换为gbk或者unicode,而 Python idle 中这三种编码都支持。中文乱码的出现都是由于编码不一致导致的,存储的是用utf-8,打印的时候用gbk就会乱码了,所有要保证不乱码尽量保持统一,建议全部使用unicode。

decode 解码

从其它编码变成unicode叫解码,解码用的方法是decode,第一个参数为被解码的字符串原始编码格式,如果写错了也会报错。比如 s 是utf-8,用gbk去解码就会报错。

# encoding:utf-8
s = "中文"
u = s.decode('gbk')
print u
print repr(u)

小提示

在 Python idle 和 cmd 下直接输入 s = "中文"会以 gbk 编码的,如果在文件中输入 s = "中文"且文件存储格式为utf-8,那么 s 是以utf-8编码存储的,有点不一样曾经踩过坑,及时 Python idle 成功了文件运行的时候也可能失败。

encode 编码

不可以直接从utf-8转换为gbk,必须经过unicode中间转换,这点很重要,被编码的原始字符串一定要为unicode,否则会报错。

raw_input

raw_input 是获取用户输入值的,获取到的用户输入值和当前运行环境编码有关,比如 cmd 下默认编码是 gbk,那么输入的汉字就是以gbk编码,而不管 demo.py 文件编码格式和编码声明。

# encoding:utf-8
s = raw_input("input something: ")
print s
print type(s)
print repr(s)

GBK 编码一个汉字两个字节,UTF-8 一个汉字通常3个字节。

细心的朋友已经注意了,raw_input的提示语我用的是英文,那改成中文看看,果真出现乱码了。

# encoding:utf-8
s = raw_input("请输入中文汉字:")
print s
print type(s)
print repr(s)

怎么办呢?把提示字符串强制为gbk编码就好,unicode和utf-8都不可以。

# encoding:utf-8
s = raw_input(u"请输入中文汉字:".encode('gbk'))
print s
print type(s)
print repr(s)

相等陷阱

“中文”这两个字符串用不同的编码存储是不一样的,utf-8编码和gbk编码存储的“中文”都不一样。

总结

想要不乱码,记住以下5点法则:

(1)文件存储为utf-8格式,编码声明为utf-8,# encoding:utf-8。

(2)出现汉字的地方前面加 u。

(3)不同编码之间不能直接转换,要经过unicode中间跳转。

(4)cmd 下不支持utf-8编码。

(5)raw_input提示字符串只能为gbk编码。

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

Python-Pycharm-解决中文乱码问题

解决方法一:需要设置File encoding,具体设置步骤如下:设置完成后,重启Pycharm编译环境,a.txt文件将显示正常编码。解决方法二:通过指定文件编码来解决中文乱码问题。运行结果:

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

解决方法:可以先把中文解码为unicode,然后再转化为gbk来解决这个问题。举例:运行结果:

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

方法一 我们可以通过先把中文解码为unicode,然后再转化为gbk来解决这个问题:修改后运行结果:方法二 当然,我们也可以通过改变cmd命令行窗口的输出格式来解决这个问题:·chcp 65001 就是换成UTF-8代码页 ·chcp 936 可以换回默认的GBK 但是这样就降低了脚本的兼容性,在其他环境运行的时候可能还会出现...

python print中文乱码问题 win10 Python2

解决方法:1.直接使用 u'是' 形式,指明以unicode编码,解码方式会以顶部 #coding定义的编码方式,如果不写,以操作系统当前编码方法,建议写上#coding,因为要让操作系统编码和源文件编码经常会不一样。推荐使用这种方式 2.输出时指定解码方法 print '是'.decode("utf8") ,必须和保存的编码一致,忽...

python编程 中文 出现乱码问题

>>> import sys>>> sys.getdefaultencoding()'ascii'解决方法:在IDLE中执行的时候 去掉字符串前面的u字符,也不要加#coding这一行。先import sys,然后reload(sys),再使用sys.setdefaultencoding("utf-8")。然后就可以打印前面带u的字符串了。(这是搜来的方法,实验了一下,发现在我这没有输出...

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

python报错invalid character in identifier,意思就是“标识符中的无效字符”,检查下有没有字符是中文的,把中文字符改成英文字符再运行就可以了。Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。其中很重要的一项就是Python的缩进规则。一...

Python+requests 爬取网站遇到中文乱码怎么办

对于Python+requests爬取网站遇到中文乱码的问题,您可以:1. 设置编码:在使用requests库发送请求时,可以通过设置`response.encoding`来指定网页的编码方式,例如`response.encoding = 'utf-8'`。这样可以确保获取到的网页内容按照指定的编码进行解码,避免中文乱码问题。2. 使用自动识别功能:八爪鱼采集器...

python3.3中文乱码与默认编码格式设定。

也因此也python 3的代码和包管理上打破了和2.x的兼容。2.x的扩展包要适应这种情况改写。另一个问题是语言环境内只有unicode怎么输出gbk之类的本地编码。答按惯例都在(序列化)输出时才转换成本地编码。比如 file.write("GBK的中文".encode("GBK"))python环境内字符串用str.encode("GBK")方法输出成...

使用jython从python传到Java的中文为乱码如何处理?

在将 Python 代码转换为 Java 代码时,如果出现中文乱码问题,可以考虑以下方法解决:在 Python 代码中使用 Unicode 编码,并在 Java 代码中设置字符集为 "UTF-8"。使用 Python 的字符串转码函数,如 .encode('utf-8') ,将字符串转换为 UTF-8 编码。使用 Java 的字符串转码函数,如 new String(string...

一次Jenkins+Python的中文乱码趟坑

原因找到了,接下来就是解决问题。既然外部配置都无效,只能在Py内部处理了。我第一反应是,错误的编码在里面逆向纠正就好了。   我尝试的方案是处理sys.argv里记录的内容:  我先用“Pok2盟友”做测试,发现问题解决了。欣喜的跑上面“中文”,结果...