encode_encodeuri - CSDN
  • encode() decode() s = '你好' bs = s.encode('utf-8') # 把s从unicode编码方式转换成utf-8的编码方式, print(bs) s1 = bs.decode('utf-8') # 解码成unicode编码 print(s1) > b'\xe4\xbd\xa0\xe5\xa5\...

    encode()
    decode()

    s = '你好'
    bs = s.encode('utf-8')  # 把s从unicode编码方式转换成utf-8的编码方式,
    print(bs)
    s1 = bs.decode('utf-8') # 解码成unicode编码
    print(s1)

    >

    b'\xe4\xbd\xa0\xe5\xa5\xbd' # 中文一个字符占三个字节
    你好
    
    展开全文
  • 由于学python没多久,昨天使用python的时候,就遇到这种问题,现在来深入研究下与之相关的encode()和decode()函数,和如何把如乱码般的字符串转成中文。encode()和decode()都是字符串的函数,可直接查看关

    对于很多人来说,python的中字符转码是一件很头疼的事情,本来期望结果输出的是中文,结果来一段像这样\xe4\xbd\xa0\xe5\xa5\xbd像是乱码的字符串。

    由于学python没多久,昨天使用python的时候,就遇到这种问题,现在来深入研究下与之相关的encode()和decode()函数,和如何把如乱码般的字符串转成中文。

    encode()和decode()都是字符串的函数,可直接查看关于python字符串章节的官方文档:
    https://docs.python.org/3/library/stdtypes.html?highlight=encode#string-methods


    从英文意思上看,encode和decode分别指编码和解码。在python中,Unicode类型是作为编码的基础类型,即:

          decode                 encode
    str ---------> str(Unicode) ---------> str
    >>> u = '中文'                 # 指定字符串类型对象u 
    
    >>> str1 = u.encode('gb2312')  # 以gb2312编码对u进行编码,获得bytes类型对象
    >>> print(str1)
    b'\xd6\xd0\xce\xc4'
    
    >>> str2 = u.encode('gbk')     # 以gbk编码对u进行编码,获得bytes类型对象
    >>> print(str2)
    b'\xd6\xd0\xce\xc4'
    >>> str3 = u.encode('utf-8')   # 以utf-8编码对u进行编码,获得bytes类型对象
    >>> print(str3)
    b'\xe4\xb8\xad\xe6\x96\x87'
    
    >>> u1 = str1.decode('gb2312') # 以gb2312编码对字符串str进行解码,获得字符串类型对象
    >>> print('u1')
    '中文'
    
    >>> u2 = str1.decode('utf-8')  # 报错,因为str1是gb2312编码的
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte

    简要说下一般有哪些编码格式。

    ASCII码

    ASCII码是美国早期制定的编码规范,只能表示128个字符,包括英文字符、阿拉伯数字、西文字符以及32个控制字符。简单来说,就是下面这个表:
    这里写图片描述

    扩展ASCII码(Extended ASCII)

    简单而言,扩展ASCII码的出现是因为ASCII不够用,所以向ASCII表继续扩充到256个符号。
    但是因为对于扩展ASCII,不同的国家有不同的标准,于是促使了Unicode编码的诞生。
    扩展ASCII码表如下:
    这里写图片描述

    Unicode

    准确来说,Unicode不是编码格式,而是字符集。这个字符集包含了世界上目前所有的符号。
    另外,在原来有些字符可以用一个字节即8位来表示的,在Unicode将所有字符的长度全部统一为16位,因此字符是定长的。
    Unicode是长这样的:

    \u4f60\u597d\u4e2d\u56fd\uff01\u0068\u0065\u006c\u006c\u006f\uff0c\u0031\u0032\u0033

    上面这段Unicode的意思是“你好中国!hello,123”。

    关于Unicode,可在这个网站查到所有字符:
    https://unicode-table.com/en/
    这里写图片描述

    这里写图片描述

    GB2312

    当国人得到计算机后,那就要对汉字进行编码。在ASCII码表的基础上,小于127的字符意义与原来相同;而将两个大于127的字节连在一起,来表示汉字,前一个字节从0xA1(161)到0xF7(247)共87个字节,称为高字节,后一个字节从0xA1(161)到0xFE(254)共94个字节,称为低字节,两者可组合出约8000种组合,用来表示6763个简体汉字、数学符号、罗马字母、日文字等。
    在重新编码的数字、标点、字母是两字节长的编码,这些称为“全角”字符;而原来在ASCII码表的127以下的称为“半角”字符。
    简单而言,GB2312就是在ASCII基础上的简体汉字扩展。

    gb2312码表:
    http://www.fileformat.info/info/charset/GB2312/list.htm

    GBK

    简单而言,GBK是对GB2312的进一步扩展(K是汉语拼音kuo zhan(扩展)中“扩”字的声母),
    收录了21886个汉字和符号,完全兼容GB2312。

    GB18030

    GB18030收录了70244个汉字和字符,更加全面,与 GB 2312-1980 和 GBK 兼容。
    GB18030支持少数民族的汉字,也包含了繁体汉字和日韩汉字。
    其编码是单、双、四字节变长编码的。

    UTF(UCS Transfer Format)

    UTF是在互联网上使用最广的一种Unicode的实现方式。我们最常用的是UTF-8,表示每次8个位传输数据,除此之外还有UTF-16。
    UTF-8长这样,“你好中国!hello,123”:

    你好中国!hello,123

    简单总结(来源于网络)

    • 中国人民通过对 ASCII 编码的中文扩充改造,产生了 GB2312 编码,可以表示6000多个常用汉字。
    • 汉字实在是太多了,包括繁体和各种字符,于是产生了 GBK 编码,它包括了 GB2312 中的编码,同时扩充了很多。
    • 中国是个多民族国家,各个民族几乎都有自己独立的语言系统,为了表示那些字符,继续把 GBK 编码扩充为 GB18030 编码。
    • 每个国家都像中国一样,把自己的语言编码,于是出现了各种各样的编码,如果你不安装相应的编码,就无法解释相应编码想表达的内容。
    • 终于,有个叫 ISO 的组织看不下去了。他们一起创造了一种编码 UNICODE ,这种编码非常大,大到可以容纳世界上任何一个文字和标志。所以只要电脑上有 UNICODE 这种编码系统,无论是全球哪种文字,只需要保存文件的时候,保存成 UNICODE 编码就可以被其他电脑正常解释。
    • UNICODE 在网络传输中,出现了两个标准 UTF-8 和 UTF-16,分别每次传输 8个位和 16个位。于是就会有人产生疑问,UTF-8 既然能保存那么多文字、符号,为什么国内还有这么多使用 GBK 等编码的人?因为 UTF-8 等编码体积比较大,占电脑空间比较多,如果面向的使用人群绝大部分都是中国人,用 GBK 等编码也可以。
    展开全文
  • ENCODE封装

    2009-09-18 21:53:00
    #ifndef ENCODE_HPP_#define ENCODE_HPP_#pragma warning(disable: 4786)#pragma warning(disable: 4996)// #include #include // #include #ifdef _WIN32#include #endif// #include

    #ifndef ENCODE_HPP_
    #define ENCODE_HPP_


    #pragma warning(disable: 4786)
    #pragma warning(disable: 4996)
    // #include <standard library headers>
    #include <string>

    // #include <other library headers>
    #ifdef _WIN32
    #include <Windows.h>
    #endif

    // #include "customer headers"


    namespace encode
    {

        inline
        std::string
        ToUtf8(const wchar_t* str)
        {
    #ifdef _WIN32
            int len = WideCharToMultiByte(CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL);
            char* buf = new char[len + 1];
            memset(buf, 0, len + 1);
            WideCharToMultiByte(CP_UTF8, 0, str, -1, buf, len, NULL, NULL);
            std::string ret = buf;
            delete[] buf;
            return ret;
    #else
    #error "not support"
    #endif
        }


        inline
        std::string
        ToUtf8(const char* str)
        {
    #ifdef _WIN32
            int len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
            wchar_t* buf = new wchar_t[len + 1];
            memset(buf, 0, (len + 1)* sizeof(wchar_t));
            MultiByteToWideChar(CP_ACP, 0, str, -1, buf, len);
            std::string ret = ToUtf8(buf);
            delete[] buf;
            return ret;
    #else
    #error "not support"
    #endif
        }


        inline
        std::wstring
        Utf8ToWstring(const char* str)
        {
    #ifdef _WIN32
            int len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
            wchar_t* buf = new wchar_t[len + 1];
            memset(buf, 0, (len + 1) * sizeof(wchar_t));
            MultiByteToWideChar(CP_UTF8, 0, str, -1, buf, len);
            std::wstring ret = buf;
            delete[] buf;
            return ret;
    #else
    #error "not support"
    #endif
        }


        inline
        std::string
        Utf8ToAscii(const char* str)
        {
    #ifdef _WIN32
            const std::wstring wstr = Utf8ToWstring(str);
            const wchar_t* tmp = wstr.c_str();
            int len = WideCharToMultiByte(CP_ACP, 0, tmp, -1, NULL, 0, NULL, NULL);
            char* buf = new char[len + 1];
            memset(buf, 0, len + 1);
            WideCharToMultiByte(CP_ACP, 0, tmp, -1, buf, len, NULL, NULL);
            std::string ret = buf;
            delete[] buf;
            return ret;
    #else
    #error "not support"
    #endif
        }


        inline
        std::wstring
        ToWstring(const char* str)
        {
    #ifdef _WIN32
            int len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
            wchar_t* buf = new wchar_t[len+1];
            memset(buf, 0, (len + 1) * sizeof(wchar_t));
            MultiByteToWideChar(CP_ACP, 0, str, -1, buf, len);
            std::wstring ret = buf;
            delete[] buf;
            return ret;
    #else
    #error "not support"
    #endif
        }


        inline
        std::string
        ToAscii(const wchar_t* str)
        {
    #ifdef _WIN32
            int len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
            char* buf = new char[len + 1];
            memset(buf, 0, len + 1);
            WideCharToMultiByte(CP_ACP, 0, str, -1, buf, len, NULL, NULL);
            std::string ret = buf;
            delete[] buf;
            return ret;
    #else
    #error "not support"
    #endif
        }

    } // // end of namespace encode


    #endif // ENCODE_HPP_

    展开全文
  • encode()函数 描述:以指定的编码格式编码字符串,默认编码为 'utf-8'。 语法:str.encode(encoding='utf-8', errors='strict') -&gt; bytes (获得bytes类型对象) encoding 参数可选,即要使用的编码,默认...

    python字符串函数用法大全链接

    encode()函数

    描述:以指定的编码格式编码字符串,默认编码为 'utf-8'。

    语法:str.encode(encoding='utf-8', errors='strict')     -> bytes (获得bytes类型对象)

    • encoding 参数可选,即要使用的编码,默认编码为 'utf-8'。字符串编码常用类型有:utf-8,gb2312,cp936,gbk等。
    • errors 参数可选,设置不同错误的处理方案。默认为 'strict',意为编码错误引起一个UnicodeEncodeError。 其它可能值有 'ignore', 'replace', 'xmlcharrefreplace'以及通过 codecs.register_error() 注册其它的值。

    程序示例:

    str1 = "我爱祖国"
    str2 = "I love my country"
    print("utf8编码:",str1.encode(encoding="utf8",errors="strict")) #等价于print("utf8编码:",str1.encode("utf8"))
    print("utf8编码:",str2.encode(encoding="utf8",errors="strict"))
    print("gb2312编码:",str1.encode(encoding="gb2312",errors="strict"))#以gb2312编码格式对str1进行编码,获得bytes类型对象的str
    print("gb2312编码:",str2.encode(encoding="gb2312",errors="strict"))
    print("cp936编码:",str1.encode(encoding="cp936",errors="strict"))
    print("cp936编码:",str2.encode(encoding="cp936",errors="strict"))
    print("gbk编码:",str1.encode(encoding="gbk",errors="strict"))
    print("gbk编码:",str2.encode(encoding="gbk",errors="strict"))

    程序运行结果:

    utf8编码: b'\xe6\x88\x91\xe7\x88\xb1\xe7\xa5\x96\xe5\x9b\xbd'
    utf8编码: b'I love my country'
    gb2312编码: b'\xce\xd2\xb0\xae\xd7\xe6\xb9\xfa'
    gb2312编码: b'I love my country'
    cp936编码: b'\xce\xd2\xb0\xae\xd7\xe6\xb9\xfa'
    cp936编码: b'I love my country'
    gbk编码: b'\xce\xd2\xb0\xae\xd7\xe6\xb9\xfa'
    gbk编码: b'I love my country'
    
    

    注:在python中encodedecode分别指编码和解码

    展开全文
  • s对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 下面简单介绍一下它们的区别 1 escape()函数 定义和用法 escape() 函数可对字符串进行...
  • def main(): name = '梁' print(len(name)) # 结果为1 ... print(len(name.encode())) # 结果为3 if __name__ == '__main__': main() 转载于:https://www.cnblogs.com/Treelight/p/108359...
  • 转自:http://blog.csdn.net/a921800467b/article/details/8579510为什么会报错“UnicodeEncodeError:'ascii' codec can't encode characters in position 0-1: ordinal notin range(128)”?本文就来研究一下这个...
  • 编码(decode与encode)

    2019-08-17 15:22:01
    decode与encode 1. 什么是编码 事实上计算机只认0或1,然而却可以通过计算机来显示文本,这就是靠编码来实现的。 编码其实就是约定的一个协议,比如ASII编码约定了大写字母A对应十进制65,那么在读取一个字符串的...
  • 为什么要对url进行encode 发现现在几乎所有的网站都对url中的汉字和特殊的字符,进行了urlencode操作,也就是: http://hi.baidu.com/%BE%B2%D0%C4%C0%CF%C8%CB/creat/blog/ 这个样子,中间%形式的,肯定就是...
  • 这其中一个常见的情况就是要求对URL进行encode处理,以保证中文、特殊字符的正确传递。不过这个小小的encode也没想象中的那么单纯。 前几日在Android开发中遇到一例时,URL中的空格符(ASCII码是0x20),在经过java...
  • encode:编码 decode:解码 python内部编码方式为unicode,decode将其他编码方式转换成unicode编码方式,encode将unicode转换成其他编码方式。 因此unicode相当于一个中转: (1)decode->unicode->encode ...
  • 如:对字符串”厦门“进行json_encode后,输出的是"\u53a6\u95e8"。 查询了一下,有两种方法: 1.将"\u53a6\u95e8"还原成“厦门”,使用如下的代码: $str= preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-
  • ios程序中不识别读取到的JSON数据中 \u开头的数据。 ... 网上很多,但是其实都是错误的,正确的方法是在json_encode 中加入一个参数 JSON_UNESCAPED_UNICODE (by default7#zbphp.... json_encode($data, JSON_UNESCAPED_U
  • 让 json_encode 格式化的数据不出现反斜杠 问题描述:  在我们给前端或者服务器返回 json 格式数据的时候,用 json_encode 格式转换后,总是出现反斜杠,而默认的 json_encode 是会对 / 转义成 \/ 的,如下返回...
  • 字符串转EnCode_c#

    2020-07-30 23:32:53
    字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c#
  • json_encode值中大括号与花括号区别 1.当array是一个从0开始的连续数组时,json_encode出来的结果是一个由[]括起来的字符串 而当array是不从0开始或者不连续的数组时,json_encode出来的结果是一个由{}括起来的key-...
  • json_encode返回数组

    2017-01-19 13:21:09
    如果你想生成一个json格式的数组格式,而不是对象格式,那么数据的下标:1、必须是数字下标索引。...1.json_encode((object) $a); 2.json_encode($a, JSON_FORCE_OBJECT); 例子: $a = [];(下标不是从0开始,json_
  • json.encode 将表格数据编码为 JSON 字符串。 格式: jsonString = json.encode(表格对象) 用法示例: local str = json.encode({a=1,b="ss",c={c1=1,c2=2},d={10,11},100}) echo(str) -- {"a":1,"b":"ss","c":{...
  • Java进行Base64的编码(Encode)与解码(Decode)的几种方式与区别..
  • decode的作用是将其他编码的字符串转换成... encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串转换成gb2312编码。  因为在jsp中对中文进行了编码的时候用
1 2 3 4 5 ... 20
收藏数 318,922
精华内容 127,568
关键字:

encode