Unicode Python encode decode的知识点总结

本文详细介绍了Python中的字符串类型,包括unicode字符串和str字符串的区别及使用场景。解释了不同编码方式如何影响字符串处理,并讨论了Python中encode和decode函数的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Python中有两种string对象,我们将字符串的类型是unicode的叫做unicode字符串,其他的都叫做str字符串。

1  Unicode字符串、str字符串和其编码类型:

    unicode字符串是一个概念上的类型。在python中,这种类型是存在于在声明中,s=u'中国'和从str decode和从unicode编码文件读出来的结果中。

   Unicode类型与其编码的类型是不同的。Unicode类型可以用utf-8, utf-16等编码类型来表示,经过这些编码后,其字符串类型是str的了,不是unicode了。str字符串是有各种不同的编码的,比如Gbk, gb2312, big5等,他们的类型就是str的了

 2Python指定源文件的类型后,字符串是什么编码格式

     如果python源文件指定了编码类型,那么这个源文件中所有声明的字符串都与这个编码类型相同。查看对象的类型为s.__class__, 比如:

   1)通过声明定义python源文件的编码:#-*-coding=utf-8-*-

   那么声明定义  s = '中国', s为str字符串,编码类型为utf-8

   如果通过声明定义python源文件的编码:#-*-coding=gbk-*-

   那么声明定义 s = '中国', s为str类型,这种类型的编码为gbk。

   如果想要定义s为unicode类型,那么 可以定义s=u'中国'

   2)如果这个字符串是从文件中读出的,那么这个字符串的类型与打开文件时所指定的类型一样,与python源文件指定的类型无关。比如:

  如果通过声明定义python源文件的编码:#-*-coding=gbk-*-

  那么通过文件读出的字符串:

    f = codecs.open("x0000", 'r', 'utf-8') 

   content = f.read()

   content的编码类型为unicode,并不是gbk

   如果打开文件时不指定编码类型,默认按照源文件的类型打开文件

   f= codecs.open("test", 'r')

  content = f.read()

   content的编码类型为gbk

3  Python中的encode和decode函数

  Python中的各种编码的类型的转换都是通过unicode作为中间人的。

  str--decode-->unicode-->--encode-->str

str对象通过decode函数将str对象转化为unicode对象。比如str的编码类型为gbk, 那么转化到unicode的方式为: str = str.decode('gbk'),这里decode的参数是要与str encoding时的参数一致的,否则会出错

unicode 对象通过encode函数将str转化为所需要的编码。

   s =u"中国"  s = s.encode('gb2312')

那么这么看来decode只是针对str对象的,encode只是针对unicode对象的,那么为什么还会有str.encode('xx')和unicode.decode('xx')呢?

    比如有一个unicode类型

    s= u'abc'

    对s.decode('gb2312')其结果不会变,仍然是s是unicode类型的,也不会出错,这是因为s都是ascII码。当s=u'中国的时候',s.decode('gb2312')会出错,

    当一个str类型的字符串去encode的时候,一般情况下会出错。当str的编码类型是utf-8的时候,好像不会出错。就相当于unicode.encode(xxx),不知道为什么。不过稳妥起见,还是先要把字符串decode到unicode后,再做转换。

4  Python的len函数:

  对unicode的类型,len的值是unicode byte的长度,unionbyte可能是16位或者32位

  s =u'中国'   len(s)  = 2

  对str类型,len的值是byte的长度,byte为8位,一个字节

  s_utf8= s.encode('utf-8')  len(s_utf8) = 6

 s_gbk = s.encode('gbk') len(s_gbk) = 4 

 

  

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值