• Python
  • Python 字符编码

    News 2年前 718次点击 来自 Python

    准备
    python3中,所有的字符串在内存中均是unicode保存(内存中都是如此,包括我们在打开txt文件的时候),当需要保存到硬盘或者需要传输的时候,转换为其他编码(GBK,UTF-8) str类型在内存中是以unicode形式存在的 bytes类型表示形式是在字符串前面加b。 本文用到的函数如下:

    函数 
    说明 
    
    
    
    
    ord() 
    查看字符在内存中十进制字节形式 
    
    
    hex() 
    将十进制转换为十六进制 
    
    
    encode() 
    将字符编码为字节 
    
    
    decode() 
    将字节解码成字符 
    

    本文需要理解概念: \x:只是 16 进制; \d:十进制; \o:八进制; \u:unicode 码;
    编译说明
    常见的编码器有(ascii/GBK/utf-8/unicode),以”码”为例,我们来说明你在python中输入字符的具体情况:
    [In]:ord(‘码’) # 查看“码”在内存中保存的字节形式(unicode)
    [Out]:
    30721
    [In]:hex(30721) # 查看“码”的16进制表示
    [Out]:
    ‘0x7801’
    [In]:“码”.encode(“unicode_escape”) # 另一种查看“码”的16进制表示
    [Out]:
    b’\u7801‘
    [In]:b’\u7801‘.decode(“unicode_escape” ) # 使用unicode反编译
    [Out]:
    ’码’
    [In]:“码”.encode(“utf-8”) # 查看“码”编译成utf-8的字节形式,\x是转译,将e7转译成十六进制
    [Out]:
    b’\xe7\xa0\x81‘
    [In]:int(0xe7a081) # 查看“码”的utf-8十进制字节形式
    [Out]:
    15179905
    [In]:b’\xe7\xa0\x81‘.decode(“utf-8”) # 将二进制编译为字符
    [Out]:
    ’码’
    [In]:“码”.encode(“GBK”) # 查看“码”编译成utf-8的字节形式,\x是转译,将e7转译成十六进制
    [Out]:
    b’\xc2\xeb’
    [In]:int(0xc2eb) # 查看“码”的GBK十进制字节形式
    [Out]:
    49899
    [In]:b’\xc2\xeb’.decode(“GBK”) # 将二进制编译为字符
    [Out]:
    ‘码’
    读取文件说明
    一般我们说的GBK 到unicode是decode过程是不准确的,因为这个过程中本身就有decode和encode的过程
    标准编码

    编解码器 
    别名 
    语言 
    
    
    
    
    ascii 
    646,us-ascii 
    英语 
    
    
    big5 
    big5-tw,csbig5 
    繁体中文 
    
    
    big5hkscs 
    big5-hkscs,hkscs 
    繁体中文 
    
    
    cp037 
    IBM037,IBM039 
    英语 
    
    
    cp273 
    273,IBM273,csIBM273 
    德语 
    
    
    cp424 
    EBCDIC-CP-HE,IBM424 
    希伯来语 
    
    
    cp437 
    437,IBM437 
    英语 
    
    
    cp500 
    EBCDIC-CP-BE,EBCDIC-CP-CH,IBM500 
    西欧 
    
    
    cp720 
    
    阿拉伯 
    
    
    cp737 
    
    希腊语 
    
    
    cp775 
    IBM775 
    波罗的海语言 
    
    
    cp850 
    850,IBM850 
    西欧 
    
    
    cp852 
    852,IBM852 
    中欧和东欧 
    
    
    cp855 
    855,IBM855 
    保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语 
    
    
    cp856 
    
    希伯来语 
    
    
    cp857 
    857,IBM857 
    土耳其 
    
    
    cp858 
    858,IBM858 
    西欧 
    
    
    cp860 
    860,IBM860 
    葡萄牙语 
    
    
    cp861 
    861,CP-IS,IBM861 
    冰岛的 
    
    
    cp862 
    862,IBM862 
    希伯来语 
    
    
    cp863 
    863,IBM863 
    加拿大 
    
    
    cp864 
    IBM864 
    阿拉伯 
    
    
    cp865 
    865,IBM865 
    丹麦语,挪威语 
    
    
    cp866 
    866,IBM866 
    俄语 
    
    
    cp869 
    869,CP-GR,IBM869 
    希腊语 
    
    
    cp874 
    
    泰国 
    
    
    cp875 
    
    希腊语 
    
    
    cp932 
    932,ms932,mskanji,ms-kanji 
    日本 
    
    
    cp949 
    949,ms949,uhc 
    韩语 
    
    
    cp950 
    950,ms950 
    繁体中文 
    
    
    cp1006 
    
    乌尔都语 
    
    
    cp1026 
    ibm1026 
    土耳其 
    
    
    cp1125 
    1125,ibm1125,cp866u,ruscii 
    乌克兰 
    
    
    cp1140 
    ibm1140 
    西欧 
    
    
    cp1250 
    windows-1250 
    中欧和东欧 
    
    
    cp1251 
    windows-1251 
    保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语 
    
    
    cp1252 
    windows-1252 
    西欧 
    
    
    cp1253 
    windows-1253 
    希腊语 
    
    
    cp1254 
    windows-1254 
    土耳其 
    
    
    cp1255 
    windows-1255 
    希伯来语 
    
    
    cp1256 
    windows-1256 
    阿拉伯 
    
    
    cp1257 
    windows-1257 
    波罗的海语言 
    
    
    cp1258 
    windows-1258 
    越南语 
    
    
    cp65001 
    仅限Windows:Windows UTF-8(CP_UTF8) 
    
    
    
    euc_jp 
    eucjp, ujis, u-jis 
    日本 
    
    
    euc_jis_2004 
    jisx0213,eucjis2004 
    日本 
    
    
    euc_jisx0213 
    eucjisx0213 
    日本 
    
    
    euc_kr 
    euckr,korean,ksc5601,ks_c-5601,ks_c-5601-1987,ksx1001,ks_x-1001 
    韩语 
    
    
    gb2312 
    chinese, csiso58gb231280, euc- cn, euccn, eucgb2312-cn, gb2312-1980, gb2312-80, iso- ir-58 
    简体中文 
    
    
    gbk 
    936,cp936,ms936 
    统一中文 
    
    
    gb18030 
    gb18030-2000 
    统一中文 
    
    
    赫兹 
    hzgb,hz-gb,hz-gb-2312 
    简体中文 
    
    
    iso2022_jp 
    csiso2022jp,iso2022jp,iso-2022-jp 
    日本 
    
    
    iso2022_jp_1 
    iso2022jp-1,iso-2022-jp-1 
    日本 
    
    
    iso2022_jp_2 
    iso2022jp-2,iso-2022-jp-2 
    日语,韩语,简体中文,西欧,希腊语 
    
    
    iso2022_jp_2004 
    iso2022jp-2004,iso-2022-jp-2004 
    日本 
    
    
    iso2022_jp_3 
    iso2022jp-3,iso-2022-jp-3 
    日本 
    
    
    iso2022_jp_ext 
    iso2022jp-ext,iso-2022-jp-ext 
    日本 
    
    
    iso2022_kr 
    csiso2022kr,iso2022kr,iso-2022-kr 
    韩语 
    
    
    latin_1 
    iso-8859-1,iso8859-1,8859,cp819,latin,latin1,L1 
    西欧 
    
    
    iso8859_2 
    iso-8859-2,latin2,L2 
    中欧和东欧 
    
    
    iso8859_3 
    iso-8859-3,latin3,L3 
    世界语,马耳他语 
    
    
    iso8859_4 
    iso-8859-4,latin4,L4 
    波罗的海语言 
    
    
    iso8859_5 
    iso-8859-5, cyrillic 
    保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语 
    
    
    iso8859_6 
    iso-8859-6,arabic 
    阿拉伯 
    
    
    iso8859_7 
    iso-8859-7,greek,greek8 
    希腊语 
    
    
    iso8859_8 
    iso-8859-8,hebrew 
    希伯来语 
    
    
    iso8859_9 
    iso-8859-9, latin5, L5 
    土耳其 
    
    
    iso8859_10 
    iso-8859-10,latin6,L6 
    北欧语言 
    
    
    iso8859_11 
    iso-8859-11 
    泰语 
    
    
    iso8859_13 
    iso-8859-13,latin7,L7 
    波罗的海语言 
    
    
    iso8859_14 
    iso-8859-14,latin8,L8 
    凯尔特语 
    
    
    iso8859_15 
    iso-8859-15,latin9,L9 
    西欧 
    
    
    iso8859_16 
    iso-8859-16,latin10,L10 
    东南欧 
    
    
    johab 
    cp1361,ms1361 
    韩语 
    
    
    koi8_r 
    
    俄语 
    
    
    koi8_t 
    
    塔吉克 
    
    
    koi8_u 
    
    乌克兰 
    
    
    kz1048 
    kz_1048,strk1048_2002,rk1048 
    哈萨克 
    
    
    mac_cyrillic 
    maccyrillic 
    保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语 
    
    
    mac_greek 
    macgreek 
    希腊语 
    
    
    mac_iceland 
    maciceland 
    冰岛的 
    
    
    mac_latin2 
    maclatin2,maccentraleurope 
    中欧和东欧 
    
    
    mac_roman 
    macroman,macintosh 
    西欧 
    
    
    mac_turkish 
    macturkish 
    土耳其 
    
    
    ptcp154 
    csptcp154, pt154, cp154, cyrillic-asian 
    哈萨克 
    
    
    shift_jis 
    csshiftjis,shiftjis,sjis,s_jis 
    日本 
    
    
    shift_jis_2004 
    shiftjis2004,sjis_2004,sjis2004 
    日本 
    
    
    shift_jisx0213 
    shiftjisx0213,sjisx0213,s_jisx0213 
    日本 
    
    
    utf_32 
    U32,utf32 
    所有语言 
    
    
    utf_32_be 
    UTF-32BE 
    所有语言 
    
    
    utf_32_le 
    UTF-32LE 
    所有语言 
    
    
    utf_16 
    U16,utf16 
    所有语言 
    
    
    utf_16_be 
    UTF-16BE 
    所有语言 
    
    
    utf_16_le 
    UTF-16LE 
    所有语言 
    
    
    utf_7 
    U7,unicode-1-1-utf-7 
    所有语言 
    
    
    utf_8 
    U8,UTF,utf8 
    所有语言 
    
    
    utf_8_sig 
    
    所有语言 
    

    python的特定编码

    编解码器 
    别名 
    目的 
    
    
    
    
    idna 
    
    实现 RFC 3490,另请参见encodings.idna。仅支持errors=’strict’。 
    
    
    mbcs 
    dbcs 
    Windows only: Encode operand according to the ANSI codepage (CP_ACP) 
    
    
    palmos 
    
    Encoding of PalmOS 3.5 
    
    
    punycode 
    
    实现 RFC 3492。不支持有状态的编解码器。 
    
    
    raw_unicode_escape 
    
    对于其他代码点,使用\uXXXX和\UXXXXXXXX进行拉丁语-1编码。现有反斜杠不以任何方式转义。它用于Python pickle协议。 
    
    
    未定义 
    
    引发所有转换(甚至是空字符串)的异常。错误处理程序被忽略。 
    
    
    unicode_escape 
    
    在ASCII编码的Python源代码中,编码适合作为Unicode字面值的内容,但引号不会转义。从Latin-1源代码解码。注意,Python源代码实际上默认使用UTF-8。 
    

    参考文献: http://python.usyiyi.cn/translate/python_352/library/codecs.html

    目前暂无回复
    关于 广告投放
    ©2016 - 2019 V4.1.6 Powered by 北京雏森科技有限公司