encoding_encoding problem - CSDN
精华内容
参与话题
  • Python之encoding

    万次阅读 2018-05-10 18:11:30
    encoding Unicode utf-8 utf-16 utf-32 gbk ASCII 码 decoding 例子 encoding 根据Python官方文档中有关字符串的部分1: str.encode(encoding=”utf-8”, errors=”strict”) Return an encoded ...

    encoding

    根据Python官方文档中有关字符串的部分1

    str.encode(encoding=”utf-8”, errors=”strict”)
    Return an encoded version of the string as a bytes object. Default encoding is ‘utf-8’. errors may be given to set a different error handling scheme. The default for errors is ‘strict’, meaning that encoding errors raise a UnicodeError. Other possible values are ‘ignore’, ‘replace’, ‘xmlcharrefreplace’, ‘backslashreplace’ and any other name registered via codecs.register_error(), see section Error Handlers. For a list of possible encodings, see section Standard Encodings.

    encoding是编码的意思,在python中,Unicode类型是作为编码的基础类型。

    Unicode

    Unicode是一种标准,包括了字符集、编码方案等。因为ASCII码只能编码英文字符,具有很大的局限性,而Unicode 为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求2。在https://unicode-table.com/en/可以查到所有的Unicode字符。

    utf-8

    UTF-8以字节为单位对Unicode进行编码。

    utf-16

    UTF-16编码以16位无符号整数为单位。

    utf-32

    UTF-32编码以32位无符号整数为单位。

    gbk

    GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification)3。GBK是采用单双字节变长编码,英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码。

    ASCII 码

    ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符4

    decoding

    根据Python官方文档中有关字符串的部分1

    bytes.decode(encoding=”utf-8”, errors=”strict”)
    bytearray.decode(encoding=”utf-8”, errors=”strict”)
    Return a string decoded from the given bytes. Default encoding is ‘utf-8’. errors may be given to set a different error handling scheme. The default for errors is ‘strict’, meaning that encoding errors raise a UnicodeError. Other possible values are ‘ignore’, ‘replace’ and any other name registered via codecs.register_error(), see section Error Handlers. For a list of possible encodings, see section Standard Encodings.
    Note Passing the encoding argument to str allows decoding any bytes-like object directly, without needing to make a temporary bytes or bytearray object.

    decode()就是将“字节流”按照某种规则转换成“文本”,可以理解为是encode()的逆过程。

    例子

    现在用一个小小的例子来体验一下编码和解码。
    首先可以去https://learnpythonthehardway.org/python3/languages.txt上将上面的字符保存在一个txt文件中,并以utf-8的形式保存,命名为languages。写下代码:

    #####encoding&decoding#####
    def main(file,encoding,errors):
        line = file.readline()
        if line:
            print_file(line,encoding,errors)
            return main(file,encoding,errors)
    
    def print_file(line,encoding,errors):
        next_lang = line.strip() ###strip() 方法用于移除字符串头尾指定的字符(默认为空格)
        raw_bytes = next_lang.encode(encoding, errors=errors) ###encode()函数中errors默认为strict,还可以设置为ignore,replace等
        cooked_string = raw_bytes.decode(encoding, errors=errors) ###decode()函数为解码
    
        print(raw_bytes, "<===>", cooked_string)
    
    
    languages = open("languages.txt", encoding="utf-8")
    main(languages,"utf-16","strict")
    

    可以得到结果(如下只显示结果片段):
    这里写图片描述
    左边为utf-8编码结果,右边为原字符,两者一一对应且可以进行互逆运算。
    将代码中的“utf-8”改成“utf-16”,可以得到以下结果:
    这里写图片描述

    展开全文
  • Encoding编码

    千次阅读 2018-02-09 18:33:21
    编码编码或者连续化处理是把分类变量转...二进制编码(Binary Encoding)通过用0或者1来表示每个类别不存在或者存在是分类变量量化的一个方法。如果分类变量有k个分类,那么我们需要创建k个二进制变量(理论上来说,...

    编码

    • 编码或者连续化处理是把分类变量转火车数值副本的过程。譬如,处理性别时,男的定为1,女的定为0.分类变量在许多模型方法中(譬如,线性回归,SVM,神经网络)必须进行编码。两种主要的编码类型是二进制编码和基于目标的编码。

    二进制编码(Binary Encoding)

    • 通过用0或者1来表示每个类别不存在或者存在是分类变量量化的一个方法。如果分类变量有k个分类,那么我们需要创建k个二进制变量(理论上来说,k-1个就已经足够了)。在下面的例子中,带3个值得分类变量“Trend”转换成3个分离的二进制数值变量。这中方法最大的缺点是当分类变量有很多个值得时候,数据的维度会大大增加。

    基于目标的编码(Target-based Encoding)

    • 基于目标的编码是通过目标来对分类变量量化。在这个方法中,我们把一个分类变量替换成一个数值变量,然后再计算该分类变量出现的目标概率(如果是分类的)或者平均值(如果是数值的)。这个方法的最大缺点是它比较依赖目标的分布,而且和二进制方法相比,它的预测能力比较低。
    • 例1
    • 用基于目标的编码处理分类目标。

    • 例2

    • 用基于目标的编码处理数值目标。

    展开全文
  • Encoding(一)

    2017-04-24 12:30:58
    前言  众所周知计算机只能识别二进制数字,如1010,1001。我们屏幕所看到的文字,字符都是和二进制转换后的结果。将我们的文字按照某种规则转换二进制存储在计算机上,这一个过程叫字符编码,反之就是解码。...

    装载自:http://www.cnblogs.com/criedshy/archive/2012/08/07/2625358.html

    前言

        众所周知计算机只能识别二进制数字,如1010,1001。我们屏幕所看到的文字,字符都是和二进制转换后的结果。将我们的文字按照某种规则转换二进制存储在计算机上,这一个过程叫字符编码,反之就是解码。目前存在多种字符编码方式,一组二进制数字根据不同的解码方式,会得到不同的结果,有时甚至会得到乱码。这也就是为什么我们打开网页时有时会是乱码,打开一个文本文件有时也是乱码,而换了一种编码就恢复正常了。CLR中的所有字符都是16位Unicode来表示的。CLR中的Encoding就是用于字节和字符之间的转换的。更多字符编码知识请参考,字符集和字符编码(Charset & Encoding)

    关于Encoding

        CLR中的Encoding是在System.Text命名空间下的,它是一个抽象类(abstract class),  所以不能被直接实例化,它主要有如下的派生类:ASCIIEnding,UnicodeEncoding,UTF32Encoding,UTF7Encoding,UTF8Encoding,你可以根据需要选择一个合适的Encoding来进行编码和解码。你也可以调用Encoding的静态属性ASCII,Unicode,UTF32,UTF7,UTF8,来构造一个Encoding。其中Unicode是表示16位Encoding。调用静态属性和实例化一个子类的效果是一样的,如下代码。

    1 Encoding encodingUTF8 = Encoding.UTF8;
    2 Encoding encodingUTF8 = new UTF8Encoding(true);

        以下是这些类型的一些简单描述:

        ASCII编码  将16位字符编码成ASCII码,只能转换值小于Ox0080的16字符,并且被转换成单字节,就是说一个字符对应一个字节。当字符都在ASCII范围(0X00~0X7F)内时,可以用这种编码,它的速度非常快,适合于英美地区的字符。这种编码非常有限,汉字会被转换成乱码。在CLR对应ASCIIEndoing。

        UTF-16     每个字符编码成2个字节,它不会对字符产生任何影响,也不会涉及到压缩处理,性能非常好,因为CLR中的字符也是16位的Unicode。在CLR中对应UnicodeEncoding。

        UTF-32     使用4个字节编码成一个字符。从内存角度上讲,它并不是一种高效能的编码方案,因为第个字符都是4个字节,特别占内存,所以很少用来做文件和网络流的编码解码。在CLR中对应UTF32Encoding。

        UTF-8      值在Ox0080之下的字符压缩成一个字符,也就是ASCII码;值在0X0080---0X07FF之间的字符都转换成2个字符,适合用于欧洲和中东地区。0X0800以上被转换成3个字符,适合于东亚地区的字符。代理项被转换成4个字节。因此,它是一种非常流行的编码,适用于互联网。它在处理0X0800以上的字符效率不好UTF-16。在CLR中对应UTF8Encoding。

        UTF-7     这咱编码通常用于旧的系统,那时的系统是用7位值表示。目前已经被Unicode协淘汰。在CLR中对应UTF7Encoding。

       从性能角度上来讲,如果你的代码需要在多处调用一个Encoding,微软建议你使用静态成员的方式构造一个Encoding对象,而不是构造实例。它的内部实现是一个单例模式。

    复制代码
    public static Encoding UTF8
    {
        get
        {
            if (utf8Encoding == null)
            {
                utf8Encoding = new UTF8Encoding(true);
            }
            return utf8Encoding;
        }
    }
    复制代码

         如果你知道某种编码的代码页(code page)或名字,那么你可以调用Encoding的静态方法GetEncoding(int codepage),GetEncoding(string name)来构造一个Encoding,比如我们常用的用于显示简体中文的gb2312,它的代码页是936,我们就可以这样定义:

    Encoding encodingGB2312=Encoding.GetEncoding("gb2312");
    Encoding encodingGB2312=Encoding.GetEncoding(936);

        目前有几十种文字代码页,分别对应于不同的国家,不同的语言,它们只是对应Unicode字符集里的相一部分,比如说936,它只是对应于Unicode字符集里简体中文的那一部分,如果你想正确的显示繁体字,那么就要用中文繁体对应的代码页950。具体的代码页有哪些可以参考MSDN或园子里这篇文章,C#文字代码页,文字编码的代码页名称速查表

       下面代码可以返回CLR中所有的Encoding。

                foreach (EncodingInfo eInfo in Encoding.GetEncodings())
                {
                    Console.WriteLine("Encoding code page is {0}, encoding name is {1}", eInfo.CodePage, eInfo.Name);
                    Console.WriteLine("Encoding dispaly name is {0}", eInfo.DisplayName);
                }

     

       Encoding对象有一个静态属性Default,它返回的也是一个Encoding对象,至于返回哪个语言的Encoding取决于你电脑里-->控制面板->区域和语言 里面的设置,也就是ANSI。如下图,我电脑里设置是Chinses(Simplified, PRC)也就是简体中文,那么对应的就是gb2312,所以下面代码会打印gb2312。如果你的代码在不止一个国家里使用,那么你最好不要Encoding.Default,这样会造成乱码,你最好用Encoding.UTF8。

    Encoding encoding1 = Encoding.Default;
    Console.WriteLine(encoding1.WebName);

     待续。。。

    下一节将讲如何使用Encoding,BOM,还有Encoder及Decoder。。。。

    展开全文
  • Encoding

    千次阅读 2018-08-06 17:23:32
    转载自 https://www.cnblogs.com/criedshy/archive/2012/08/07/2625358.html C# 小叙 Encoding (一) ASCII编码 使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。 UTF-8 可变长度字符编码,...

     

     

    转载自 https://www.cnblogs.com/criedshy/archive/2012/08/07/2625358.html C# 小叙 Encoding (一)

    ASCII编码 使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。

    UTF-8       可变长度字符编码,如果要表示的情况不够时,就会增加字节数。如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。如果只有一个字节则其最高二进制位为0;

    UTF-16     每个字符编码成2个字节,它不会对字符产生任何影响,也不会涉及到压缩处理,性能非常好,

    UTF-32     使用4个字节编码成一个字符。

     

    print(System.Text.Encoding.UTF8.GetBytes("1").Length);//打印 1
    print(System.Text.Encoding.UTF8.GetBytes("hao").Length);//打印 3
    print(System.Text.Encoding.UTF8.GetBytes("好人").Length);//打印 6
    print(System.Text.Encoding.Default.BodyName);//打印 gb2312

    展开全文
  • (2)encoding 是 charset encoding 的简写,即字符集编码,简称编码。、 与接口及接口实现的对比 从这里可以很清楚地看到, 一、编码是依赖于字符集的,就像代码中的接口实现依赖于接口一样; 二、一个字符集...
  • 根据多次在ie6、ie7上测试发现用Encoding.Default的基本可以解决95%的乱码输出的问题,虽然网上有帖子说“谨慎使用Encoding.Default”,原帖见备注一。 但是另外的5%的乱码需要Encoding.GetEncoding("utf...
  • [转]谨慎使用Encoding.Default

    万次阅读 2017-03-22 14:53:56
    在处理文本时,经常需要处理Encoding的概念。存在这个问题的原因在于,在.NET程序内文本只是string和char对象,而保存到硬盘时,或者准备用socket把它发送出去时,都得先转换成byte[]或者字节流。而转换的算法,就是...
  • 解决maven打包编译出现File encoding has not been set问题

    万次阅读 多人点赞 2017-05-11 09:59:28
    maven打包编译时后台...[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent! 找了半天,原来只要在pom.xml文件中增加一个配置项即可 <project.build.sour
  • 在程序最上面加上:# coding=gbk
  • 解决Python unknown encoding:cp0

    万次阅读 2017-09-28 18:22:40
    原文:...标题:解决Python unknown encoding:cp0 用了Apache代理Python的方式,利用阿里云的SDK一直出现这个unknown encoding: cp0问题。 折腾了默认的编码ASCII改成UTF-8后一样无果
  • python的open()函数中encoding参数的问题

    万次阅读 2019-08-08 13:13:19
    python的open()函数中encoding参数的问题 ** 最近在用python打开文本文件进行词频统计时遇到一个问题 txt = open("threekingdoms.txt", "r", encoding ='utf-8').read() 运行后会出现UnicodeDecodeError异常 ...
  • [Python]"no encoding declared 错误"解决方法

    万次阅读 多人点赞 2015-02-02 23:02:40
    SyntaxError: Non-ASCII character '\xe5' in file Test1.py on line 8, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 解决方法:python的默认编码文件是用的
  • unknown encoding: cp65001错误

    万次阅读 2015-07-21 15:25:52
    unknown encoding: cp65001异常 编码格式错误,需要将编码修改为:简体中文 即:C:\>chcp 936
  • 在我们java开发者可能会经常碰到 unmappable character for encoding错误,错误原因是:源代码中包含GBK编码中不包含的字符,解决方法:源代码中包含GBK编码中不包含的字符, •删除该字符  •将源代码...
  • 关于 Java 的系统属性 sun.jnu.encoding 和 file.encoding 的区别  sun.jnu.encoding 影响文件名的创建,而 file.encoding 则影响到文件内容。  所以说,在我们使用 Java 处理中文文件的时候,如果发现文件的...
  • TypeError: string argument without an encoding

    万次阅读 2018-10-05 16:17:56
    在python使用udp传输过程中报错:TypeError: string argument without an encoding 解决办法参考:https://www.cnblogs.com/eric-nirnava/p/werkzeug2-1.html  报错处:server_socket.sendto(bytes(s), addr) ...
  • spring web项目中需要在添加CharacterEncodingFilter springboot中只需要在配置文件中添加以下配置 ...spring.http.encoding.enabled=true  spring.http.encoding.force=true    参考springboot官方文档 ht...
  • file.encoding跟操作系统默认字符集有关,Windows下默认的是GBK,但我们程序一般IO流中字符编码一般都设置的是utf-8,这样会导致中文乱码。因此需要修改file.encoding为UTF-8.如果应用容器是tomcat,可参考如下修改...
  • 执行Maven Install打包的时候,提示...[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!解决方法: 打开项目属性》Resources,按下图修改就好了。
  • maven打包出现的utf-8编码错误的解决

    千次阅读 2017-04-25 12:25:06
    maven项目打包的时候,出现...[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent! [WARNING] Using platform encoding (UTF-8 actually) to copy filtered
1 2 3 4 5 ... 20
收藏数 1,432,727
精华内容 573,090
关键字:

encoding