python中string和Unicode的区别

如题所述

首先要弄清楚的是,在python里,string object和unicode object是两种不同的类型。

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 object,其他编码的我们就叫做string。

至于python里的unicode到底是ucs2还是ucs4的,可以在编译时指定。例如Linux下,要用ucs2做unicode的编码,可以这样
# ./configure --enable-unicode=ucs2
# make
# make install
下载的Windows预编译版本,一般都是ucs2的。要想知道某个python运行环境是ucs2还是ucs4,可以查看sys.maxunicde,65535就是ucs2的,另一个很大的数值就是ucs4。

下面我们看看string和unicode在python里的不同
我们先看看在简体中文Windows 2003系统下,系统编码是GBK
>>> a = '你好'
>>> a
'/xc4/xe3/xba/xc3'
>>> b = u'你好'
>>> b
u'/u4f60/u597d'
>>> print a
你好
>>> print b
你好
>>> a.__class__
<type 'str'>
>>> b.__class__
<type 'unicode'>
>>> len(a)
4
>>> len(b)
2

在一个系统编码为UTF-8的Linux环境下
>>> a = '你好'
>>> a
'/xe4/xbd/xa0/xe5/xa5/xbd'
>>> b = u'你好'
>>> b
u'/u4f60/u597d'
>>> print a
你好
>>> print b
你好
>>> a.__class__
<type 'str'>
>>> b.__class__
<type 'unicode'>
>>> len(a)
6
>>> len(b)
2

如何?简单总结一下:
1、string直接用引号来表示,unicode在引号前加一个u
2、直接输入的string常量会用系统缺省编码方式来编码,例如在GBK环境下,'你好'会编码成'/xc4/xe3/xba/xc3',而在UTF-8环境下就成了'/xe4/xbd/xa0/xe5/xa5/xbd'。
3、len(string)返回string的字节数,len(unicode)返回的是字符数
4、很重要的一点,print unicode不会乱码。现在我们常用的Linux、Windows系统,都是支持unicode的,版本太老的不算。比如Windows 2003支持ucs2,所以在中文Windows2003下,除了可以正常显示缺省的GBK编码外,还可以正常显示ucs2编码。举个例子,还是在中文Windows 2003的GBK环境下:
>>>a = '/xe4/xbd/xa0/xe5/xa5/xbd' # UTF-8的'你好'
>>> print a
浣犲ソ
>>> b = unicode(a, "UTF-8")
>>> b
u'/u4f60/u597d'
>>> print b
你好

应该明白了吧?

下面再说说string和unicode的相互转换,什么unicode()、decode()、encode()、codecs之类的。
温馨提示:内容为网友见解,仅供参考
无其他回答

python中string和Unicode的区别
首先要弄清楚的是,在python里,string object和unicode object是两种不同的类型。string object是由characters组成的sequence,而unicode object是Unicode code units组成的sequence。string里的character是有多种编码方式的,比如单字节的ASCII,双字节的GB2312等等,再比如UTF-8。很明显要想解读string,必需知...

python中字符串前的r什么意思
Python中,u表示unicode string,表示使用unicode进行编码,没有u表示byte string,类型是str,在没有声明编码方式时,默认ASCI编码。如果要指定编码方式,可在文件顶部加入类似如下代码:-*- coding: utf-8 -*- utf-8是一种支持中文的编码格式。字母前加r表示raw string,也叫原始字符串常量。一般用在...

python中unicode编码有多少位(2023年最新分享)
现在,捋一捋ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节。 字母A用ASCII编码是十进制的65,二进制的01000001; 字符0用ASCII编码是十进制的48,二进制的00110000,注意字符'0'和整数0是不同的; 汉字已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的0100111000101101。

python编码有多少(2023年最新解答)
1).首先python有两种格式的字符串,str和unicode,其中unicode相当于字节码那样,可以跨平台使用。 str转化为unicode可以通过unicode(),u,str.decode三种方式 unicode转化为str,如果有中文的话,一般通过encode的方式 2).如果代码中有中文的话,我们一般会添加"#coding=utf-8",这个是什么作用呢,一般如下: 如果代码中有...

bytes、str、与 unicode 的区别有哪些?
其中,bytes是一种不可变的二进制数据类型,而str是一种可变的对象类型,它可以包含Unicode字符。unicode则是一种编码格式,用于表示Unicode字符集中的字符。 在Python 2中,有两种表示字符序列的类型:str和unicode。与Python 3不同的是,str实例包含原始的8位值;而unicode的实例,则包含Unicode字符。 在...

python如何将unicode中文字符串转换成string字符串
chinese_string = "这是一个中文字符串"print # 输出:这是一个中文字符串 在上述代码中,"这是一个中文字符串"就是一个包含Unicode字符的字符串。在Python中处理这样的字符串就像处理任何其他类型的字符串一样简单。只有在处理涉及不同编码的文本数据时,才需要考虑编码转换的问题。但在大多数情况下...

Python String和PyQt QString的区别
在python中有两种与字符有关的类型:string object和Unicode object。平时进行输入输出的一般都用string object,当需要显示一些特殊字符或者中文等文字时候,需要转换为Unicode编码。在PyQt中也有两种字符类型与上面两者对应:QByteArray和QString,主要是使用QString操作数据。

Python中的几种数据类型
Python 中主要有8种数据类型:number(数字)、string(字符串)、list(列表)、tuple(元组)、dict(字典)、set(集合)、Boolean(布尔值)、None(空值)。 1、字符串 字符串的声明有三种方式:单引号、双引号和三引号(包括三个单引号或三个双引号) 2、数字 Python3 支持三种不同的数值类型: 整型(int):通常被称为是...

python中 r'', b'', u'', f'' 的含义
b' ':表示这是一个bytes对象,用在Python3中,它默认的str是unicode类,Python2的str本身就是bytes类。b" ":表示后面字符串是bytes类型。前缀b表示该字符串是bytes类型,常用在网络编程,服务器和浏览器只认bytes类型的数据,如send函数的参数和recv的函数的返回值都是bytes类型。4、字符串前+f:Py...

Python如何将Unicode中文字符串转换成 string字符串
Unicode字符串可以用多种方式编码为普通字符串,假设unicodestring = u"Hello world",依照所选择的编码(encoding),如下:1、#将Unicode转换成普通的Python字符串:"编码(encode)"。2、 #将普通的Python字符串转换成Unicode: "解码(decode)"。

相似回答