当前位置:   article > 正文

【转】怎么在Python里使用UTF-8编码_python encoding=utf-8

python encoding=utf-8

基本概念

在Python里有两种类型的字符串类型:字节字符串和Unicode的字符串,一个字节字符串就是一个包含字节列表。 当需要的时候,Python根据电脑默认的locale设置将字节转化成字符。 在Mac OX上默认的编码是UTF-8,但是在别的系统上,大部分是ASCII。

比如创建一个字节字符串:

byteString = "hello world! (in my default locale)"

创建一个Unicode字符串:

unicodeString = u"hello Unicode world!"

将一个字节字符串转成Unicode字符串然后再转回来:

  1. s = "hello byte string"
  2. u = s.decode()
  3. backToBytes = u.encode()

以上代码使用的是系统默认的字符来出来转换的。 然而,依赖系统的区域设置的字符集不是一个好主意,或许你的程序在泰文用户的电脑上就会崩溃。 最好的办法就是为字符指定一个编码:

  1. s = "hello normal string"
  2. u = s.decode("UTF-8" )
  3. backToBytes = u.encode( "UTF-8" )

现在,字节字符串s就被当成一个UTF-8字节列表去创建一个Unicode字符串u, 下一行用UTF-8表示的字符串u转换成字节字符串backToBytes.

如何判断一个对象是字符串

比如这样去判断:

  1. if isinstance( s, str ):
  2. pass

这样是不对的,因为Unicode字符串将不为真. 代替的是使用通用字符串类, basestring:

  1. if isinstance( s, basestring ):# True for both Unicode and byte strings
  2. pass

单独判断是不是Unicode字符串:

  1. if isinstance( s, unicode ):
  2. pass

读取UTF-8编码的文件

你可以手工转换从文件中读取的字符串,方法很简单:

  1. import codecs
  2. fileObj = codecs.open( "someFile", "r", "UTF-8" )
  3. u = fileObj.read() # Returns a Unicode string from the UTF-8 bytes in the file

codecs模块可以处理所有的编码转换。

源码的编码声明

Python源代码默认是 ASCII.可以在源文件的第一行或者是第二行作如下声明:

# coding=UTF-8

or (using formats recognized by popular editors):

="block" data-draft-type="table" data-size="normal" data-row-style="normal">

1
2
#!/usr/bin/python
# -*- coding: UTF-8 -*-

or:

="block" data-draft-type="table" data-size="normal" data-row-style="normal">

1
2
#!/usr/bin/python
# vim: set fileencoding=UTF-8 :

系统编码

前面说了,Python根据电脑默认的locale设置将字节转化成字符.那如何获得系统的默认编码:

  1. import sys
  2. print sys.getdefaultencoding()

更改系统的默认编码:

  1. import sys
  2. reload(sys)
  3. sys.setdefaultencoding('UTF-8')

为什么要reload sys模块,先看下python的模块加载过程:

  1. # python -v
  2. # installing zipimport hook
  3. import zipimport # builtin
  4. # installed zipimport hook
  5. # /usr/local/lib/python2.6/site.pyc matches /usr/local/lib/python2.6/site.py
  6. import site # precompiled from /usr/local/lib/python2.6/site.pyc
  7. ....

Python运行的时候首先加载了site.py,在site.py文件里有这么一段代码:

  1. if hasattr(sys, "setdefaultencoding"):
  2. del sys.setdefaultencoding

在sys加载后,setdefaultencoding方法被删除了,所以我们要通过重新导入sys来设置系统编码.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/678855
推荐阅读
相关标签
  

闽ICP备14008679号