zoukankan      html  css  js  c++  java
  • encode&decode

    decode()和encode()

    encode()和decode()都是字符串的函数,分别指编码和解码,在python中,Unicode类型是作为编码的基础类型,如下:

    decode                 encode
    str ---------> str(Unicode) ---------> str
    

    即:
    str.decode()是指其他编码方式解码为unicode码,
    str.encode(‘qita’)unicode码编为qita格式的

    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    s = '中文字符'  # 这里的 str 是 str 类型的,而不是 unicode
    print  s.encode('gb2312')
    

    这个代码会报错:

    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
    

    这句代码直接将s 重新编码为 gb2312 的格式,即进行 unicode -> str 的转换。因为 s 本身就是 str 类型的,因此
    Python 会自动的先将 s 解码为 unicode ,然后再编码成 gb2312。

    因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding指明的方式来解码。很多情况下 sys.defaultencoding为ANSCII,如果 s 不是这个类型就会出错。

    所以要设置缺省解码方式

    解决方法:

    1. 明确的指示出 s 的编码方式

    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    s = '中文字符'  # 这里的 str 是 str 类型的,而不是 unicode
    print  s.decode('utf-8').encode('gb2312')
    

    2. 更改 sys.defaultencoding 为文件的编码方式

    开头添加如下代码:

    import sys
    reload(sys) 
    sys.setdefaultencoding('utf-8')
    
    #! /usr/bin/env python
    #  -*- coding: utf-8 -*-
    import sys
    reload(sys) # Python2.5 初始化后删除了 sys.setdefaultencoding 方法,我们需要重新载入
    sys.setdefaultencoding('utf-8')
    
    str = '中文字符'
    print str.encode('gb2312')
    

    acsii,utf-8,unicode关系

    link

    1. ascii 英文
    2. utf-8 所有语言
    3. nuicode 支持所有编码(但是如果你写的文本基本上全部是英文的话,没必要nuicode,ascii更节省内存)。所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码

    所以用utf-8基本就够了

  • 相关阅读:
    Windows 8(64位)如何搭建 Android 开发环境与真机测试(转)
    C# winform写入和读取TXT文件
    winform利用ImageList控件和ListView控件组合制作图片文件浏览器
    Linux 桌面玩家指南:01. 玩转 Linux 系统的方法论
    这些年一直记不住的 Java I/O
    深入理解 JavaScript,以及 Linux 下的开发调试工具
    在 Ubuntu 中使用 Visual Studio Code
    像黑客一样使用 Linux 命令行
    JAAS 是个什么梗
    Java 开发主流 IDE 环境体验
  • 原文地址:https://www.cnblogs.com/monkey-moon/p/9374350.html
Copyright © 2011-2022 走看看