最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python windows下中文乱码怎么解决

    正文概述    2020-03-20   256

    python windows下中文乱码怎么解决

    中文编码问题是用中文的程序员经常头大的问题,在python下也是如此。

    我们要知道python内部使用的是unicode编码,而外部却要面对千奇百怪的各种编码,比如作为中国程序经常要面对的gbk,gb2312,utf8等,那这些编码是怎么转换成内部的unicode呢?

    一、源代码文件的编码格式

    python默认会认为源代码文件是asci编码。

    s1='hello'
    print s1

    python认为这个'hello'就是一个asci编码的字符。在仅仅使用英文字符的情况下一切正常,但是如果用了中文,比如:

    s1='你好'
    print s1

    这个代码文件被执行时就会出错。python默认将代码文件内容当作asci编码处理,但asci编码中不存在中文,因此抛出异常。

    解决方法就是让python知道文件中使用的是什么编码。只需在代码文件的最前端添加如下:

    # -*- coding: utf-8 -*-

    表示我这个文件里的文本是用utf-8编码的,这样,python就会依照utf-8的编码形式解读其中的字符,然后转换成unicode编码内部处理使用。

    相关推荐:《Python入门教程》

    二、windows下控制台编码

    Python 的 print 语句。它的功能是向控制台输出字符,这本身不是问题。但是 Python 内部是支持 Unicode 字符串的,而 Unicode 字符串在用 print 输出时 print 要进行一次从 Unicode 到 ANSI/MBCS 编码的编码,编码后才会以 8-bit 流输出结果。

    编码就编码吧,这也是很正常的。对于控制台程序来说,输出可能被重定向到文本文件。如果不指定编码,重定向时就不知道以何种 8-bit 字节流写入文本文件,所以,输出到控制台的东西理论上也应该是经过编码的 8-bit 流。综上所述,确实有必要进行一次 WCHAR 到 char 的转码。

    但是问题在于,Python 的 print 语句在转码时,居然用的是 strict 规则。即,待输出字符串若含有当前代码页之外的字符,就会在转码过程中出现不可转码的文字,从而抛出 exception。print 语句又不处理这个 exception,导致一个平平常常 print 语句竟然会引起 Python 程序的异常!

    解决方法:CHCP

    CHCP是MS DOS中的命令,用来显示或设置活动代码页编号的。

    用法是:CHCP [nnn]

    其中nnn指定的是代码页的编号。这个参数是可选的,在命令行下如果不指定这个代码页编号,那么默认是显示当前的代码页编号。比如,在默认的cmd窗口中,我们输入chcp,显示的将类似:

    活动的代码页: 936

    这里的936表示当前使用的是简体中文(GB2312)编码。如果输出的字符在代码页之内,就不会出现问题。如果出现了,可以:

    运行CMD;

    输入 CHCP,回车查看当前的编码;

    输入CHCP 65001,回车;(指定为utf-8)

    这时候,你的Console里面,应该支持UTF8了。

    三、文件读取

    其中,关于open的编码解释如下:

    读取时:内置的open()方法打开文件时,read()读取的是str,读取后需要使用正确的编码格式进行decode()。write()写入时,如果参数是unicode,则需要使用你希望写入的编码进行encode(),如果是其他编码格式的str,则需要先用该str的编码进行decode(),转成unicode后再使用写入的编码进行encode()。如果直接将unicode作为参数传入write()方法,Python将先使用源代码文件声明的字符编码进行编码然后写入。

    编码时:模块codecs提供了一个open()方法,可以指定一个编码打开文件,使用这个方法打开的文件读取返回的将是unicode。写入时,如果参数是unicode,则使用open()时指定的编码进行编码后写入;如果是str,则先根据源代码文件声明的字符编码,解码成unicode后再进行前述操作。相对内置的open()来说,这个方法比较不容易在编码上出现问题。

    所以可以在读取的时候指定编码,这样可以避免很多问题。


    起源地下载网 » python windows下中文乱码怎么解决

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元