zoukankan      html  css  js  c++  java
  • Python中文

    在python中有两种默认的字符串:str和unicode。在Python中一定要注意区分“Unicode字符串”和"Unicode对象”的区别。

    后面所有的“Unicode字符串”都是指"Unicode对象”。

    一个传统的字符串完全可以用str对象表示,它仅仅是一个字节流,除非解码为unicode对象,否则没有任何实际意义。

    一开始先上例子

    >>> s='哈哈'
    >>> s
    'xe5x93x88xe5x93x88'
    >>> type(s)
    <type 'str'>
    >>> 
    >>> ss = u'哈哈'
    >>> ss
    u'u54c8u54c8'
    >>> type(ss)
    <type 'unicode'>

    ss声明为unicode

    >>> u = s.decode('utf8')
    >>> u
    u'u54c8u54c8'
    >>> print u
    哈哈
    >>> 
    >>> u = s.decode('utf-16')
    >>> 
    >>> u
    u'u93e5ue588u8893'
    >>> print u
    鏥�袓

    将字符串s(utf8编码)使用decode进行解码后,可以得到同等得unicode对象,和直接声明为unicode的ss一样

    >>> u=ss.decode('utf8')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/sinasrv2/lib/python2.7/encodings/utf_8.py", line 16, in decode
        return codecs.utf_8_decode(input, errors, True)
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
    >>> u=ss.encode('utf8')
    >>> u
    'xe5x93x88xe5x93x88'
    >>> print u
    哈哈

    可以将unicode对象编码encode成其他字符集,不能进行解码decode,decode是针对utf8、GBK编码来说的

    下面再给一个例子进行说明:

    1、先声明一个unicode对象

    2、将其编码成gbk

    3、直接print出现不显示

    4、使用decode解码成GBK,正确显示

    >>> ss = u'哈哈'
    >>> ss
    u'u54c8u54c8'
    >>> t = ss.encode('gbk')
    >>> t
    'xb9xfexb9xfe'
    >>> print t
    
     >>> 
    >>> print t.decode('gbk')
    哈哈

    序列化unicode对象

    >>> str(ss)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

    向文件直接输出ss会抛异常。在处理unicode中文字符串的时候,必须首先对它调用encode函数,转换成其他编码输出。

    总结:在Python中,str对象就是一个字节数组,至于里面的内容是不是一个合法的字符串,以及这个字符串采用什么编码都不重要。

    这些内容需要用户自己记录和判断。这个限制也同样适用于unicode对象。要记住unicode对象中的内容可绝对不一定就是合法的unicode字符串。

    【参考链接】

    1、http://blog.csdn.net/mayflowers/article/details/1568852

  • 相关阅读:
    【HDU】2461 Rectangles
    【POJ】2409 Let it Bead
    【HDU】3208 Integer’s Power
    【HDU】1812 Count the Tetris
    【POJ】2888 Magic Bracelet
    【HDU】2865 Birthday Toy
    黑白色的华为(6) 不是银弹的银弹
    黑白色的华为(10) 不是答案的答案
    ubuntu上升级cmake到3.16版本
    黑白色的华为(8) 从加法到减法
  • 原文地址:https://www.cnblogs.com/gsblog/p/3860584.html
Copyright © 2011-2022 走看看