string和unicode

string object是由characters组成的sequence,而unicode object是Unicode code units组成的sequence。

string里的character是有多种编码方式的,比如单字节的ASCII,双字节的GB2312等等,再比如UTF-8。很明显要想解读string,必需知道string里的character是用哪种编码方式,然后才能进行。

Unicode code unit又是什么东西呢?一个Unicode code unit是一个16-bit或者32-bit的数值,每个数值代表一个unicode符号。在python里,16-bit的unicode,对应的是ucs2编码。32-bit对应的是ucs4编码。是不是感觉string里character的编码没什么区别?反正我现在脑子里就是这样一个印象:在Python里,ucs2或者ucs4编码的(所以才说unicode也可以解码?),我们叫做unicode object,其他编码(utf8,gbk之类)的我们就叫做string。

使用chardet判断字符串编码

安装:pip install chardet

# -*- coding:utf-8 -*-
import chardet

a = '哈哈'
b = u'哈哈'
print type(a)
print type(b)
print chardet.detect(a)
print chardet.detect(a.encode('gbk'))
print chardet.detect(b)

输出:

<type 'str'>
<type 'unicode'>
{'confidence': 0.75249999999999995, 'language': '', 'encoding': 'utf-8'}
{'confidence': 0.72999999999999998, 'language': '', 'encoding': 'ISO-8859-1'}
Traceback (most recent call last):
  File "C:UsersadminDesktopad.py", line 10, in <module>
    print chardet.detect(b)
  File "C:Python26libsite-packageschardet\__init__.py", line 34, in detect
    '{0}'.format(type(byte_str)))
TypeError: Expected object of type bytes or bytearray, got: <type 'unicode'>
原文地址:https://www.cnblogs.com/songbird/p/7525011.html