python 中文乱码问题深入分析

遇到Windows命令行print 字符串输出中文乱码的问题,在参考以下文章后顺利解决

原文链接:http://www.jb51.net/article/26543.htm

方法是 print string.decode(‘utf-8’).encode(‘gbk’)

=======================================

二、str str


如上图的演示代码所示: 当把s(gbk字符串)直接编码成utf-8的时候,将抛出异常,但是通过调用如下代码:

import sys

reload(sys)

sys.setdefaultencoding(‘gbk’)

Python2.5  建立一个文件test.txt,文件格式用ANSI,内容为:

abc中文

用python来读取

# coding=gbk

print open(“Test.txt”).read()

结果:abc中文

把文件格式改成UTF-8:

结果:abc涓枃

显然,这里需要解码:

# coding=gbk

import codecs

print open(“Test.txt”).read().decode(“utf-8”)

结果:abc中文

运行时 错:

Traceback (most recent call last):

File “ChineseTest.py”, line 3, in 

print open(“Test.txt”).read().decode(“utf-8”)

UnicodeEncodeError: ‘gbk’ codec can’t encode character u’ufeff’ in position 0: illegal multibyte sequence

原来,某些软件,如notepad,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。

因此我们在读取时需要自己去掉这些字符,python中的codecs module定义了这个常量:

# coding=gbk

import codecs

data = open(“Test.txt”).read()

if data[:3] == codecs.BOM_UTF8:

data = data[3:]

print data.decode(“utf-8”)

结果:abc中文

五、文件的编码格式和编码声明的作用

str = ‘ print repr(str)

a. b.

  • 声明源文件中将出现非ascii编码,通常也就是中文;
  • 在高级的IDE中,IDE会将你的文件格式保存成你指定编码格式。
  • 决定源码中类似于u’哈’这类声明的将‘哈’解码成unicode所用的编码格式,也是一个比较容易让人迷惑的地方,看示例:
  • ss = u’ print repr(ss)

    print ‘ss:%s’ % ss

    u’u54c8u54c8′

    ss: u’u935du581du6431′

    ss: 1)  2)  #-*- coding:utf-8 -*-

    ss = u’ print repr(ss)

    print ‘ss:%s’ % ss

    UnicodeDecodeError: ‘utf8’ codec can’t decode byte 0xb9 in position 0: unexpected code byte

    这里为什么会有utf8解码错误呢想上个示例也明白了,转换第一步,因为文件编码是GBK,得到的是’哈哈’编码是GBK的编码’xb9xfexb9xfe’,当进行第二步,转换成 unicode的时候,会用UTF8对’xb9xfexb9xfe’进行解码,而大家查utf-8的编码表会发现,utf8编码表(关于UTF- 8解释可参见字符编码笔记:ASCII、UTF-8、UNICODE)中根本不存在,所以会 上述错误。

    文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览210344 人正在系统学习中

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2016年2月24日
    下一篇 2016年2月25日

    相关推荐