精华内容
下载资源
问答
  • 记事本编码格式

    2015-05-17 17:10:50
    记事本编码格式  1、 每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset)。 开始只有一种字符集,即ANSI的 ASCII字符集,用 7bits表示一个字符,能表示 128个...

    转载来源:http://blog.csdn.net/xiaogugood/article/details/8638531


    以下为自己概括:

    记事本编码格式 

    1、
    每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset)。
    开始只有一种字符集,即ANSI的 ASCII字符集,用 7bits表示一个字符,能表示 128个字符。
    随后进行拓展,使用 8BITS表示一个字符,能表示 256个字符,新增了有  特殊符号,比如制表符。
    为了表示 其他国家 的文字,于是 开始扩展ANSI,叫做 派生字符集(也叫:多字节字符系统,MBCS,multi-byte character system)。
    这些派生字符集的特点是以ASCII 127 bits为基础,兼容ASCII 127,他们使用大于128的编码作为一个Leading Byte,紧跟在Leading Byte后的第二(甚至第三)个字符与Leading Byte一起作为实际的编码。
    比如 GB-2312
    例如在GB-2312字符集中,“连通”的编码为C1 AC CD A8,其中C1和CD就是Leading Byte。前127个编码为标准ASCII保留,例如“0”的编码是30H(30H表示十六进制的30)。软件在读取时,如果看到30H,知道它小于128就是标准ASCII,表示“0”,看到C1大于128就知道它后面有一个另外的编码,因此C1 AC一同构成一个整个的编码,在GB-2312字符集中表示“连”。
    但 随着 字符集 的变多,在国际交流中 转换字符集不方便,于是提出了Unicode 字符集
    使用 固定16bits 来表示一个字符,可表示65536个字符,称为 utf-16
    由于有些系统 每次只能单字节的处理,故出现了UTF-8
    例如“连通”两个字的Unicode标准编码UTF-16 (big endian)为:DE 8F 1A 90
    而其UTF-8编码为:E8 BF 9E E9 80 9A
    2、
    软件以何种方式 加载字符
    检测文本最开头的几个字节,进行判断,所以可能会出错
    3、
    原文 还介绍了一些编码基础知识
    字符
    字符集
    代码点
    代码单元
    和常见的编码方式
    展开全文
  • 记事本编码格式浅析

    千次阅读 2013-03-05 16:23:27
    记事本文件的编码格式: 在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset)。 在最初的时候,Internet上只有一种字符集...

    原文地址:http://blog.csdn.net/liyangbing315/article/details/5616643


    问题一。记事本文件的编码格式:

    在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset)

    在最初的时候,Internet上只有一种字符集——ANSIASCII字符集,它使用7 bits来表示一个字符,总共表示128个字符,其中包括了英文字母、数字、标点符号等常用字符。之后,又进行扩展,使用8 bits表示一个字符,可以表示256个字符,主要在原来的7 bits字符集的基础上加入了一些特殊符号例如制表符。

    后来,由于各国语言的加入,ASCII已经不能满足信息交流的需要,因此,为了能够表示其它国家的文字,各国在ASCII的基础上制定了自己的字符集,这些从ANSI标准派生的字符集被习惯的统称为ANSI字符集,它们正式的名称应该是MBCS(Multi-Byte Chactacter System,即多字节字符系统)。这些派生字符集的特点是以ASCII 127 bits为基础,兼容ASCII 127,他们使用大于128的编码作为一个Leading Byte,紧跟在Leading Byte后的第二(甚至第三)个字符与Leading Byte一起作为实际的编码。这样的字符集有很多,我们常见的GB-2312就是其中之一。

    例如在GB-2312字符集中,连通的编码为C1 AC CD A8,其中C1CD就是Leading Byte。前127个编码为标准ASCII保留,例如“0”的编码是30H30H表示十六进制的30)。软件在读取时,如果看到30H,知道它小于128就是标准ASCII,表示“0”,看到C1大于128就知道它后面有一个另外的编码,因此C1 AC一同构成一个整个的编码,在GB-2312字符集中表示

    由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,提出了Unicode字符集,它固定使用16 bits(两个字节、一个字)来表示一个字符,共可以表示65536个字符。将世界上几乎所有语言的常用字符收录其中,方便了信息交流。标准的Unicode称为UTF-16。后来为了双字节的Unicode能够在现存的处理单字节的系统上正确传输,出现了UTF-8,使用类似MBCS的方式对Unicode进行编码。注意UTF-8是编码,它属于Unicode字符集。Unicode字符集有多种编码形式,而ASCII只有一种,大多数MBCS(包括GB-2312)也只有一种。

    例如连通两个字的Unicode标准编码UTF-16 (big endian)为:DE 8F 1A 90

    而其UTF-8编码为:E8 BF 9E E9 80 9A

     

    最后,当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字符集的哪种编码保存的。软件有三种途径来决定文本的字符集和编码:

    最标准的途径是检测文本最开头的几个字节,如下表:

    开头字节

    Charset/encoding

    EF BB BF

    UTF-8

    FE FF

    UTF-16/UCS-2, little endian

    FF FE

    UTF-16/UCS-2, big endian

    FF FE 00 00

    UTF-32/UCS-4, little endian.

    00 00 FE FF

    UTF-32/UCS-4, big-endian.

    例如插入标记后,连通两个字的UTF-16 (big endian)和UTF-8码分别为:
    FF FE DE 8F 1A 90
    EF BB BF E8 BF 9E E9 80 9A

    但是MBCS文本没有这些位于开头的字符集标记,更不幸的是,一些早期的和一些设计不良的软件在保存Unicode文本时不插入这些位于开头的字符集标记。因此,软件不能依赖于这种途径。这时,软件可以采取一种比较安全的方式来决定字符集及其编码,那就是弹出一个对话框来请示用户,例如将那个连通文件拖到MS Word中,Word就会弹出一个对话框。

    如果软件不想麻烦用户,或者它不方便向用户请示,那它只能采取自己的方法,软件可以根据整个文本的特征来猜测它可能属于哪个charset,这就很可能不准了。使用记事本打开那个连通文件就属于这种情况。

    我们可以证明这一点:在记事本中键入连通后,选择另存为,会看到最后一个下拉框中显示有“ANSI”,这时保存。当再当打开连通文件出现乱码后,再点击文件”->“另存为,会看到最后一个下拉框中显示有“UTF-8”,这说明记事本认为当前打开的这个文本是一个UTF-8编码的文本。而我们刚才保存时是用ANSI字符集保存的。这说明,记事本猜测了连通文件的字符集,认为它更像一个UTF-8编码文本。这是因为连通两个字的GB-2312编码看起来更像UTF-8编码导致的,这是一个巧合,不是所有文字都这样。可以使用记事本的打开功能,在打开连通文件时在最后一个下拉框中选择ANSI,就能正常显示了。反过来,如果之前保存时保存为UTF-8编码,则直接打开也不会出现问题。

    如果将连通文件放入MS Word中,Word也会认为它是一个UTF-8编码的文件,但它不能确定,因此会弹出一个对话框询问用户,这时选择简体中文(GB2312,就能正常打开了。记事本在这一点上做得比较简化罢了。

     

    实验证明:

    File file = new File("D:/记事本.txt");

          

           BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));

          

           int t;

           int j = 0;

           while ((t=bis.read()) != -1) {

               j++;

               System.out.print(Integer.toString(t, 16) + " ");

               if (j % 2 == 0) {

                  System.out.println();

               }

           }

    当记事本保存为ANSI格式时:

    输出: c1 ac     cd a8

    当记事本保存为UTF-8:

     

    ef bb bf (bom)

    e8 bf 9e

    e9 80 9a

    当记事本保存为Unicode时:

    ff fe (bom)

    de 8f

    1a 90

    当记事本保存为Unicode big endian

    fe ff (bom)

    8f de

    90 1a

     

    读取字符流时,要根据记事本文件的格式,指定直接流,转换为字符流的编码格式:方法如下:

    BufferedReader br = new BufferedReader(new InputStreamReader(newFileInputStream(file),"utf-8"));

     

    int t;

        while ((t=br.read()) != -1) {

           System.out.println((char)t);

        }

          

    编码基础知识:

     

    1,字符:字符是抽象的最小文本单位。它没有固定的形状(可能是一个字形),而且没有值。“A”是一个字符,“€”(德国、法国和许多其他欧洲国家通用货币的标志)也是一个字符。“中”“国”这是两个汉字字符。字符仅仅代表一个符号,没有任何实际值的意义。
    2,字符集:字符集是字符的集合。例如,汉字字符是中国人最先发明的字符,在中文、日文、韩文和越南文的书写中使用。这也说明了字符和字符集之间的关系,字符组成字符集(iso8859-1,GB2312/GBK,unicode)。
    3,代码点:字符集中的每个字符都被分配到一个“代码点”。每个代码点都有一个特定的唯一数值,称为标值。该标量值通常用十六进制表示。
    4,代码单元: 在每种编码形式中,代码点被映射到一个或多个代码单元。“代码单元”是各个编码方式中的单个单元。代码单元的大小等效于特定编码方式的位数:
    UTF-8 :UTF-8 中的代码单元由 8 位组成;在 UTF-8 中,因为代码单元较小的缘故,每个代码点常常被映射到多个代码单元。代码点将被映射到一个、两个、三个或四个代码单元;
    UTF-16 :UTF-16 中的代码单元由 16 位组成;UTF-16 的代码单元大小是 8 位代码单元的两倍。所以,标量值小于 U+10000 的代码点被编码到单个代码单元中;
    UTF-32:UTF-32  中的代码单元由 32 位组成; UTF-32 中使用的 32 位代码单元足够大,每个代码点都可编码为单个代码单元;
    GB18030:GB18030  中的代码单元由 8 位组成;在 GB18030 中,因为代码单元较小的缘故,每个代码点常常被映射到多个代码单元。代码点将被映射到一个、两个或四个代码单元。
    5,举例:

    “中国北京香蕉是个大笨蛋”这是我定义的aka字符集;各字符对应代码点为:
    北 00000001
    京 00000010
    香 10000001
    蕉 10000010
    是 10000100
    个 10001000
    大 10010000
    笨 10100000
    蛋 11000000
    中 00000100
    国 00001000
    下面是我定义的 zixia 编码方案(8位),可以看到它的编码中表示了aka字符集的所有字符对应的 代码单元;
    北 10000001
    京 10000010
    香 00000001
    蕉 00000010
    是 00000100
    个 00001000
    大 00010000
    笨 00100000
    蛋 01000000
    中 10000100
    国 10001000
    所谓文本文件 就是我们按一定编码方式将二进制数据表示为对应的文本如00000001000000100000010000001000000100000010000001000000这样的文件。我用一个支持zixia编码和aka字符集的记事本打开,它就按照编码方案显示为  “香蕉是个大笨蛋 ”
    如果我把这些字符按照GBK另存一个文件,那么则肯定不是这个,而是
    1100111111100011 1011110110110110 1100101011000111 1011100011110110 1011010011110011 1011000110111111 1011010110110000 110100001010

    二,字符集
    1, 常用字符集分类
    ASCII及其扩展字符集
    作用:表语英语及西欧语言。
    位数:ASCII是用7位表示的,能表示128个字符;其扩展使用8位表示,表示256个字符。
    范围:ASCII从00到7F,扩展从00到FF。
    ISO-8859-1字符集
    作用:扩展ASCII,表示西欧、希腊语等。
    位数:8位,
    范围:从00到FF,兼容ASCII字符集。
    GB2312字符集
    作用:国家简体中文字符集,兼容ASCII。
    位数:使用2个字节表示,能表示7445个符号,包括6763个汉字,几乎覆盖所有高频率汉字。
    范围:高字节从A1到F7, 低字节从A1到FE。将高字节和低字节分别加上0XA0即可得到编码。
    BIG5字符集
    作用:统一繁体字编码。
    位数:使用2个字节表示,表示13053个汉字。
    范围:高字节从A1到F9,低字节从40到7E,A1到FE。
    GBK字符集
    作用:它是GB2312的扩展,加入对繁体字的支持,兼容GB2312。
    位数:使用2个字节表示,可表示21886个字符。
    范围:高字节从81到FE,低字节从40到FE。
    GB18030字符集
    作用:它解决了中文、日文、朝鲜语等的编码,兼容GBK。
    位数:它采用变字节表示(1 ASCII,2,4字节)。可表示27484个文字。
    范围:1字节从00到7F; 2字节高字节从81到FE,低字节从40到7E和80到FE;4字节第一三字节从81到FE,第二四字节从30到39。
    UCS字符集
    作用:国际标准 ISO 10646 定义了通用字符集 (Universal Character Set)。它是与UNICODE同类的组织,UCS-2和UNICODE兼容。
    位数:它有UCS-2和UCS-4两种格式,分别是2字节和4字节。
    范围:目前,UCS-4只是在UCS-2前面加了0×0000。
    UNICODE字符集
    作用:为世界650种语言进行统一编码,兼容ISO-8859-1。
    位数:UNICODE字符集有多个编码方式,分别是UTF-8,UTF-16和UTF-32。
    2 ,按所表示的文字分类
    语言                                 字符集                                     正式名称
    英语、西欧语                     ASCII,ISO-8859-1                MBCS 多字节
    简体中文                             GB2312                                    MBCS 多字节
    繁体中文                             BIG5                                         MBCS多字节
    简繁中文                             GBK                                         MBCS多字节
    中文、日文及朝鲜语         GB18030                                  MBCS 多字节
    各国语言                             UNICODE,UCS                    DBCS 宽字节

    三,编码
    UTF-8:采用变长字节 (1 ASCII, 2 希腊字母, 3 汉字, 4 平面符号) 表示,网络传输, 即使错了一个字节,不影响其他字节,而双字节只要一个错了,其他也错了,具体如下:
    如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。UTF-8最多可用到6个字节。

    UTF-16:采用2字节,Unicode中不同部分的字符都同样基于现有的标准。这是为了便于转换。从 0×0000到0×007F是ASCII字符,从0×0080到0×00FF是ISO-8859-1对ASCII的扩展。希腊字母表使用从0×0370到 0×03FF 的代码,斯拉夫语使用从0×0400到0×04FF的代码,美国使用从0×0530到0×058F的代码,希伯来语使用从0×0590到0×05FF的代 码。中国、日本和韩国的象形文字(总称为CJK)占用了从0×3000到0×9FFF的代码;由于0×00在c语言及操作系统文件名等中有特殊意义,故很 多情况下需要UTF-8编码保存文本,去掉这个0×00。举例如下:
    UTF-16: 0×0080  = 0000 0000 1000 0000
    UTF-8:   0xC280 = 1100 0010 1000 0000
    UTF-32:采用4字节。
    优缺点
    UTF-8、UTF-16和UTF-32都可以表示有效编码空间 (U+000000-U+10FFFF) 内的所有Unicode字符。
    使用UTF-8编码时ASCII字符只占1个字节,存储效率比较高,适用于拉丁字符较多的场合以节省空间。
    对于大多数非拉丁字符(如中文和日文)来说,UTF-16所需存储空间最小,每个字符只占2个字节。
    Windows NT内核是Unicode(UTF-16),采用UTF-16编码在调用系统API时无需转换,处理速度也比较快。
    采用UTF-16和UTF-32会有Big Endian和Little Endian之分,而UTF-8则没有字节顺序问题,所以UTF-8适合传输和通信。
    UTF-32采用4字节编码,一方面处理速度比较快,但另一方面也浪费了大量空间,影响传输速度,因而很少使用。

    四,如何判断字符集
    1,字节序
    首先说一下字节序对编码的影响,字节序分为Big Endian字节序和Little Endian字节序。不同的处理器可能不一样。所以,传输时需要告诉处理器当时的编码字节序。对于前者而言,高位字节存在低地址,低字节存于高地址;后者相反。例如,0X03AB,
    Big Endian字节序
    0000: 0 3
    0001: AB
    Little Endian字节序是
    0000: AB
    0001: 0 3
    2,编码识别
    UNICODE,根据前几个字节可以判断UNICODE字符集的各种编码,叫做Byte Order Mask方法BOM:
    UTF-8: EFBBBF (符合UTF-8格式,请看上面。但没有含义在UCS即UNICODE中)
    UTF-16 Big Endian:FEFF (没有含义在UCS-2中)
    UTF-16 Little Endian:FFFE (没有含义在UCS-2中)
    UTF-32 Big Endian:0000FEFF (没有含义在UCS-4中)
    UTF-32 Little Endian:FFFE0000 (没有含义在UCS-4中)

    GB2312:高字节和低字节的第1位都是1。

    BIG5,GBK&GB18030:高字节的第1位为1。操作系统有默认的编码,常为GBK,可以下载别的并升级。通过判断高字节的第1位从而知道是ASCII或者汉字编码。

    展开全文
  • 记事本【另存为】新文件时,【编码】中缺省的是“ANSI”,在下拉菜单中选定“unicode”即可。

    记事本【另存为】新文件时,【编码】中缺省的是“ANSI”,在下拉菜单中选定“unicode”即可。

    展开全文
  • Windows记事本编码反汇编分析

    千次阅读 2020-03-08 18:01:17
    这个段子大致是说,若你在简体中文版本的 Windows 系统下,用系统自带的记事本程序,以默认的 ANSI 编码保存「联通」两个字,那么重新打开后「联通」二字就消失了。如果我没记错的话,还曾有好事者据此编排,认定 ...

    转载自:liam.page


    网上有一个流传多年的段子。这个段子大致是说,若你在简体中文版本的 Windows 系统下,用系统自带的记事本程序,以默认的 ANSI 编码保存「联通」两个字,那么重新打开后「联通」二字就消失了。如果我没记错的话,还曾有好事者据此编排,认定 Windows 背后的微软和联通有仇,故意不让联通二字正常显示。

    当然,这个说法肯定是假的。但是这一现象背后的原因究竟是什么呢?

    Windows 记事本都做了什么

    这里着重感谢 margen 对 Windows 记事本程序做的逆向工作。没有他的工作,本文不至于这样精彩。光荣属于前辈!

    根据 margen 的逆向分析,在打开文件的过程中,记事本程序会调用 fDetermineFileType 来判断文件的编码类型。翻译成 C 语言代码,大致如下。Windows 记事本在以 ANSI 保存文件时,没有任何多余的动作,直接将 buffer 中的内容通过WriteFile 系统调用写入到 txt 文件当中。

    我们以 010editor 打开保存了「联通」二字文件看看。
    在这里插入图片描述
    可以看到,在简体中文 Windows 下,以记事本保存「联通」两个字。那么保存得到的 txt 文件内,就仅有 0xC1AACDA8 这些内容。而 0xC1AA0xCDA8 正是「联通」两个字的 GBK 编码。

    打开的过程

    根据 margen 的逆向分析,在打开文件的过程中,记事本程序会调用 fDetermineFileType 来判断文件的编码类型。翻译成 C 语言代码,大致如下。

    int __stdcall fDetermineFileType(LPVOID lpBuffer,int cb)
    {
            int iType = 0;
            WORD wSign = 0;
    
            if( cb <= 1 ) return 0;
    
            wSign = *(PWORD)lpBuffer;
            switch( wSign )
            {
            case 0xBBEF:
                    {
                            if( cb >= 3 && (PBYTE)lpBuffer[3] == 0xBF) iType = 3;
                    }
                    break;
            case 0xFEFF:
                    {
                            iType = 1;
                    }
                    break;
            case 0xFFFE:
                    {
                            iType = 2;
                    }
                    break;
            default:
                    {
                            if( !IsInputTextUnicode( lpBuffer, cb ) )
                            {
                                    if( IsTextUTF8( lpBuffer, cb ) ) iType = 3;
                            }
                            else iType = 1;
                    }
            }
            return iType;
    }
    

    首先,代码从文件头部取出了前 2 个字节,然后走 switch 分支判断。

    若前两个字节是 0xBBEF,且文件第三个字节是 0xBF,则组成 UTF-8 的 BOM(虽然 UTF-8 不需要)。那么据此判断文件编码是 UTF-8。

    若前两个字节是 0xFEFF,那么这是小端序 UTF-16 的 BOM。据此判断文件编码是(Windows 所谓的)Unicode 编码。

    若前两个字节是 0xFFFE,那么这是大端序的 UTF-16 的 BOM。据此判断文件编码是(Windows 所谓的)Unicode Big Endian 编码。

    否则,则需要做更深层次的判断。注意到,iType 被初始化为 0,代表 ANSI 编码(简体中文下是 CP936,相当于是 GBK 编码)。若已走到了 default 分支,要函数返回 0,当且仅当 IsTextUTF8( lpBuffer, cb ) 为 false 才行。然而,这个函数的写法是这样的。

    BOOL IsTextUTF8( LPSTR lpBuffer, int iBufSize )
    {
            int iLeftBytes = 0;
            BOOL bUtf8 = FALSE;
            if( iBufSize <= 0 ) return FALSE;
    
            for( int i=0;i<iBufSize;i++)
            {
                    char c = lpBuffer[i];
                    if( c < 0 ) bUtf8 = TRUE;
                    if( iLeftBytes == 0 )
                    {
                            if( c >= 0 ) continue;
                            do
                            {
                                    c <<= 1;
                                    iLeftBytes++;
                            } while( c < 0 );
                            iLeftBytes--;
                            if( iLeftBytes == 0 ) return FALSE;
                    }
                    else
                    {
                            c &= 0xC0;
                            if( c != (char)0x80 ) return FALSE;
                            else iLeftBytes--;
                    }
            }
            if( iLeftBytes ) return FALSE;
    
            return bUtf8;
    }
    

    我们重点看 for循环内部的逻辑。首先,char c = lpBuffer[i]; 从 buffer 中取出一个字节,保存在 signed char 当中。而后判断if( c < 0 )。因为 c 是有符号的 char,所以 c < 0 意味着最高位是 1。这就意味着该字符肯定不是 ASCII 字符,可能是一个 UTF-8 字符。因此将bUtf8 置为 true。

    而后,在 if( iLeftBytes == 0 ) 分支中,我们看到 c <<= 1; iLeftBytes++;的 do-while 循环。这是在判断 UTF-8 编码的首字符中,有多少个前缀的 1。根据 UTF-8 的编码规则,这个数值就是该 UTF-8 字符的编码长度,记录在iLeftBytes 当中。

    接下来,根据 iLeftBytes 的大小,逐一检查后续的字节,是否以 10 开头。一旦发现有不满足条件的字节,就能判定当前文档不是 UTF-8 编码的。或是(在 for 循环结束之后)发现 iLeftBytes 尚未自减到 0 就已经到了文档末尾,则也可以判定当前文档不是 UTF-8 编码的。

    也就是说,这个函数的逻辑,是根据 UTF-8 编码规则,全文扫描。若发现有一个字符不符合 UTF-8 的编码规则,则返回 false;否则若全文都符合 UTF-8 的编码规则,则返回 true

    「联通」都经历了什么?

    回过头,我们看到,联通二字以 ANSI(CP936)保存的 txt 文件里只有 0xC1AACDA8这些内容。因为无有 BOM,所以在fDetermineFileType函数中必然走到 default 分支,而后陷入IsTextUTF8 函数当中。

    不巧的是,0xC1AA0xCDA8 都符合 UTF-8 编码的要求。因此该函数返回 true。于是,Windows 记事本打开这一文件时,认定这是一个无 BOM 的 UTF-8 编码的文件。于是按照 UTF-8 编码去解读0xC1AACDA8,那么就乱码了。

    还有哪些字符

    从前文的分析,我们可以得到结论:如果一个以 ANSI(CP936/GBK)保存的文档,内里包含的所有字符,都不幸满足了 UTF-8 的编码规则。那么这个文档将被 Windows 记事本当做是 UTF-8 编码的文件打开,就会乱码。

    由于 GBK 是双字节的编码格式,只可能满足 UTF-8 中对 U+0080U+07FF 编码的格式:110xxxxx, 10xxxxxx。我们可以将这些字符全都扫描输出出来。以下是完成这一任务的 Python 代码。

    pluses = map(lambda i:"+%s" % (hex(i)[2:].upper()), xrange(16))
    headline = "%s%s" % (" " * 7, " ".join(pluses))
    print headline
    
    for i in xrange(192, 224):
        high = hex(i)[2:].upper()
        for j in xrange(4):
            low = hex(128 + j * 16)[2:].upper()
            chars = map(lambda k:(chr(i) + chr(128 + j * 16 + k)).decode("gbk"), xrange(16))
            line = u"0x%s%s %s" % (high, low, " ".join(chars))
            print line
    

    得到的结果是:

           +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
    0xC080 纮 纴 纻 纼 绖 绤 绬 绹 缊 缐 缞 缷 缹 缻 缼 缽
    0xC090 缾 缿 罀 罁 罃 罆 罇 罈 罉 罊 罋 罌 罍 罎 罏 罒
    0xC0A0 罓 馈 愧 溃 坤 昆 捆 困 括 扩 廓 阔 垃 拉 喇 蜡
    0xC0B0 腊 辣 啦 莱 来 赖 蓝 婪 栏 拦 篮 阑 兰 澜 谰 揽
    0xC180 羳 羴 羵 羶 羷 羺 羻 羾 翀 翂 翃 翄 翆 翇 翈 翉
    0xC190 翋 翍 翏 翐 翑 習 翓 翖 翗 翙 翚 翛 翜 翝 翞 翢
    0xC1A0 翣 痢 立 粒 沥 隶 力 璃 哩 俩 联 莲 连 镰 廉 怜
    0xC1B0 涟 帘 敛 脸 链 恋 炼 练 粮 凉 梁 粱 良 两 辆 量
    0xC280 聙 聛 聜 聝 聞 聟 聠 聡 聢 聣 聤 聥 聦 聧 聨 聫
    0xC290 聬 聭 聮 聯 聰 聲 聳 聴 聵 聶 職 聸 聹 聺 聻 聼
    0xC2A0 聽 隆 垄 拢 陇 楼 娄 搂 篓 漏 陋 芦 卢 颅 庐 炉
    0xC2B0 掳 卤 虏 鲁 麓 碌 露 路 赂 鹿 潞 禄 录 陆 戮 驴
    0xC380 脌 脕 脗 脙 脛 脜 脝 脟 脠 脡 脢 脣 脤 脥 脦 脧
    0xC390 脨 脩 脪 脫 脭 脮 脰 脳 脴 脵 脷 脹 脺 脻 脼 脽
    0xC3A0 脿 谩 芒 茫 盲 氓 忙 莽 猫 茅 锚 毛 矛 铆 卯 茂
    0xC3B0 冒 帽 貌 贸 么 玫 枚 梅 酶 霉 煤 没 眉 媒 镁 每
    0xC480 膧 膩 膫 膬 膭 膮 膯 膰 膱 膲 膴 膵 膶 膷 膸 膹
    0xC490 膼 膽 膾 膿 臄 臅 臇 臈 臉 臋 臍 臎 臏 臐 臑 臒
    0xC4A0 臓 摹 蘑 模 膜 磨 摩 魔 抹 末 莫 墨 默 沫 漠 寞
    0xC4B0 陌 谋 牟 某 拇 牡 亩 姆 母 墓 暮 幕 募 慕 木 目
    0xC580 艀 艁 艂 艃 艅 艆 艈 艊 艌 艍 艎 艐 艑 艒 艓 艔
    0xC590 艕 艖 艗 艙 艛 艜 艝 艞 艠 艡 艢 艣 艤 艥 艦 艧
    0xC5A0 艩 拧 泞 牛 扭 钮 纽 脓 浓 农 弄 奴 努 怒 女 暖
    0xC5B0 虐 疟 挪 懦 糯 诺 哦 欧 鸥 殴 藕 呕 偶 沤 啪 趴
    0xC680 苺 苼 苽 苾 苿 茀 茊 茋 茍 茐 茒 茓 茖 茘 茙 茝
    0xC690 茞 茟 茠 茡 茢 茣 茤 茥 茦 茩 茪 茮 茰 茲 茷 茻
    0xC6A0 茽 啤 脾 疲 皮 匹 痞 僻 屁 譬 篇 偏 片 骗 飘 漂
    0xC6B0 瓢 票 撇 瞥 拼 频 贫 品 聘 乒 坪 苹 萍 平 凭 瓶
    0xC780 莯 莵 莻 莾 莿 菂 菃 菄 菆 菈 菉 菋 菍 菎 菐 菑
    0xC790 菒 菓 菕 菗 菙 菚 菛 菞 菢 菣 菤 菦 菧 菨 菫 菬
    0xC7A0 菭 恰 洽 牵 扦 钎 铅 千 迁 签 仟 谦 乾 黔 钱 钳
    0xC7B0 前 潜 遣 浅 谴 堑 嵌 欠 歉 枪 呛 腔 羌 墙 蔷 强
    0xC880 葊 葋 葌 葍 葎 葏 葐 葒 葓 葔 葕 葖 葘 葝 葞 葟
    0xC890 葠 葢 葤 葥 葦 葧 葨 葪 葮 葯 葰 葲 葴 葷 葹 葻
    0xC8A0 葼 取 娶 龋 趣 去 圈 颧 权 醛 泉 全 痊 拳 犬 券
    0xC8B0 劝 缺 炔 瘸 却 鹊 榷 确 雀 裙 群 然 燃 冉 染 瓤
    0xC980 蓘 蓙 蓚 蓛 蓜 蓞 蓡 蓢 蓤 蓧 蓨 蓩 蓪 蓫 蓭 蓮
    0xC990 蓯 蓱 蓲 蓳 蓴 蓵 蓶 蓷 蓸 蓹 蓺 蓻 蓽 蓾 蔀 蔁
    0xC9A0 蔂 伞 散 桑 嗓 丧 搔 骚 扫 嫂 瑟 色 涩 森 僧 莎
    0xC9B0 砂 杀 刹 沙 纱 傻 啥 煞 筛 晒 珊 苫 杉 山 删 煽
    0xCA80 蕗 蕘 蕚 蕛 蕜 蕝 蕟 蕠 蕡 蕢 蕣 蕥 蕦 蕧 蕩 蕪
    0xCA90 蕫 蕬 蕭 蕮 蕯 蕰 蕱 蕳 蕵 蕶 蕷 蕸 蕼 蕽 蕿 薀
    0xCAA0 薁 省 盛 剩 胜 圣 师 失 狮 施 湿 诗 尸 虱 十 石
    0xCAB0 拾 时 什 食 蚀 实 识 史 矢 使 屎 驶 始 式 示 士
    0xCB80 藔 藖 藗 藘 藙 藚 藛 藝 藞 藟 藠 藡 藢 藣 藥 藦
    0xCB90 藧 藨 藪 藫 藬 藭 藮 藯 藰 藱 藲 藳 藴 藵 藶 藷
    0xCBA0 藸 恕 刷 耍 摔 衰 甩 帅 栓 拴 霜 双 爽 谁 水 睡
    0xCBB0 税 吮 瞬 顺 舜 说 硕 朔 烁 斯 撕 嘶 思 私 司 丝
    0xCC80 虁 虂 虃 虄 虅 虆 虇 虈 虉 虊 虋 虌 虒 虓 處 虖
    0xCC90 虗 虘 虙 虛 虜 虝 號 虠 虡 虣 虤 虥 虦 虧 虨 虩
    0xCCA0 虪 獭 挞 蹋 踏 胎 苔 抬 台 泰 酞 太 态 汰 坍 摊
    0xCCB0 贪 瘫 滩 坛 檀 痰 潭 谭 谈 坦 毯 袒 碳 探 叹 炭
    0xCD80 蛝 蛠 蛡 蛢 蛣 蛥 蛦 蛧 蛨 蛪 蛫 蛬 蛯 蛵 蛶 蛷
    0xCD90 蛺 蛻 蛼 蛽 蛿 蜁 蜄 蜅 蜆 蜋 蜌 蜎 蜏 蜐 蜑 蜔
    0xCDA0 蜖 汀 廷 停 亭 庭 挺 艇 通 桐 酮 瞳 同 铜 彤 童
    0xCDB0 桶 捅 筒 统 痛 偷 投 头 透 凸 秃 突 图 徒 途 涂
    0xCE80 蝷 蝸 蝹 蝺 蝿 螀 螁 螄 螆 螇 螉 螊 螌 螎 螏 螐
    0xCE90 螑 螒 螔 螕 螖 螘 螙 螚 螛 螜 螝 螞 螠 螡 螢 螣
    0xCEA0 螤 巍 微 危 韦 违 桅 围 唯 惟 为 潍 维 苇 萎 委
    0xCEB0 伟 伪 尾 纬 未 蔚 味 畏 胃 喂 魏 位 渭 谓 尉 慰
    0xCF80 蟺 蟻 蟼 蟽 蟿 蠀 蠁 蠂 蠄 蠅 蠆 蠇 蠈 蠉 蠋 蠌
    0xCF90 蠍 蠎 蠏 蠐 蠑 蠒 蠔 蠗 蠘 蠙 蠚 蠜 蠝 蠞 蠟 蠠
    0xCFA0 蠣 稀 息 希 悉 膝 夕 惜 熄 烯 溪 汐 犀 檄 袭 席
    0xCFB0 习 媳 喜 铣 洗 系 隙 戏 细 瞎 虾 匣 霞 辖 暇 峡
    0xD080 衻 衼 袀 袃 袆 袇 袉 袊 袌 袎 袏 袐 袑 袓 袔 袕
    0xD090 袗 袘 袙 袚 袛 袝 袞 袟 袠 袡 袣 袥 袦 袧 袨 袩
    0xD0A0 袪 小 孝 校 肖 啸 笑 效 楔 些 歇 蝎 鞋 协 挟 携
    0xD0B0 邪 斜 胁 谐 写 械 卸 蟹 懈 泄 泻 谢 屑 薪 芯 锌
    0xD180 褉 褋 褌 褍 褎 褏 褑 褔 褕 褖 褗 褘 褜 褝 褞 褟
    0xD190 褠 褢 褣 褤 褦 褧 褨 褩 褬 褭 褮 褯 褱 褲 褳 褵
    0xD1A0 褷 选 癣 眩 绚 靴 薛 学 穴 雪 血 勋 熏 循 旬 询
    0xD1B0 寻 驯 巡 殉 汛 训 讯 逊 迅 压 押 鸦 鸭 呀 丫 芽
    0xD280 襽 襾 覀 覂 覄 覅 覇 覈 覉 覊 見 覌 覍 覎 規 覐
    0xD290 覑 覒 覓 覔 覕 視 覗 覘 覙 覚 覛 覜 覝 覞 覟 覠
    0xD2A0 覡 摇 尧 遥 窑 谣 姚 咬 舀 药 要 耀 椰 噎 耶 爷
    0xD2B0 野 冶 也 页 掖 业 叶 曳 腋 夜 液 一 壹 医 揖 铱
    0xD380 觻 觼 觽 觾 觿 訁 訂 訃 訄 訅 訆 計 訉 訊 訋 訌
    0xD390 訍 討 訏 訐 訑 訒 訓 訔 訕 訖 託 記 訙 訚 訛 訜
    0xD3A0 訝 印 英 樱 婴 鹰 应 缨 莹 萤 营 荧 蝇 迎 赢 盈
    0xD3B0 影 颖 硬 映 哟 拥 佣 臃 痈 庸 雍 踊 蛹 咏 泳 涌
    0xD480 詟 詠 詡 詢 詣 詤 詥 試 詧 詨 詩 詪 詫 詬 詭 詮
    0xD490 詯 詰 話 該 詳 詴 詵 詶 詷 詸 詺 詻 詼 詽 詾 詿
    0xD4A0 誀 浴 寓 裕 预 豫 驭 鸳 渊 冤 元 垣 袁 原 援 辕
    0xD6A0 譅 帧 症 郑 证 芝 枝 支 吱 蜘 知 肢 脂 汁 之 织
    0xD6B0 职 直 植 殖 执 值 侄 址 指 止 趾 只 旨 纸 志 挚
    0xD780 讇 讈 讉 變 讋 讌 讍 讎 讏 讐 讑 讒 讓 讔 讕 讖
    0xD790 讗 讘 讙 讚 讛 讜 讝 讞 讟 讬 讱 讻 诇 诐 诪 谉
    0xD7A0 谞 住 注 祝 驻 抓 爪 拽 专 砖 转 撰 赚 篆 桩 庄
    0xD7B0 装 妆 撞 壮 状 椎 锥 追 赘 坠 缀 谆 准 捉 拙 卓
    0xD880 貈 貋 貍 貎 貏 貐 貑 貒 貓 貕 貖 貗 貙 貚 貛 貜
    0xD890 貝 貞 貟 負 財 貢 貣 貤 貥 貦 貧 貨 販 貪 貫 責
    0xD8A0 貭 亍 丌 兀 丐 廿 卅 丕 亘 丞 鬲 孬 噩 丨 禺 丿
    0xD8B0 匕 乇 夭 爻 卮 氐 囟 胤 馗 毓 睾 鼗 丶 亟 鼐 乜
    0xD980 賭 賮 賯 賰 賱 賲 賳 賴 賵 賶 賷 賸 賹 賺 賻 購
    0xD990 賽 賾 賿 贀 贁 贂 贃 贄 贅 贆 贇 贈 贉 贊 贋 贌
    0xD9A0 贍 佟 佗 伲 伽 佶 佴 侑 侉 侃 侏 佾 佻 侪 佼 侬
    0xD9B0 侔 俦 俨 俪 俅 俚 俣 俜 俑 俟 俸 倩 偌 俳 倬 倏
    0xDA80 趢 趤 趥 趦 趧 趨 趩 趪 趫 趬 趭 趮 趯 趰 趲 趶
    0xDA90 趷 趹 趻 趽 跀 跁 跂 跅 跇 跈 跉 跊 跍 跐 跒 跓
    0xDAA0 跔 凇 冖 冢 冥 讠 讦 讧 讪 讴 讵 讷 诂 诃 诋 诏
    0xDAB0 诎 诒 诓 诔 诖 诘 诙 诜 诟 诠 诤 诨 诩 诮 诰 诳
    0xDB80 踿 蹃 蹅 蹆 蹌 蹍 蹎 蹏 蹐 蹓 蹔 蹕 蹖 蹗 蹘 蹚
    0xDB90 蹛 蹜 蹝 蹞 蹟 蹠 蹡 蹢 蹣 蹤 蹥 蹧 蹨 蹪 蹫 蹮
    0xDBA0 蹱 邸 邰 郏 郅 邾 郐 郄 郇 郓 郦 郢 郜 郗 郛 郫
    0xDBB0 郯 郾 鄄 鄢 鄞 鄣 鄱 鄯 鄹 酃 酆 刍 奂 劢 劬 劭
    0xDC80 軃 軄 軅 軆 軇 軈 軉 車 軋 軌 軍 軏 軐 軑 軒 軓
    0xDC90 軔 軕 軖 軗 軘 軙 軚 軛 軜 軝 軞 軟 軠 軡 転 軣
    0xDCA0 軤 堋 堍 埽 埭 堀 堞 堙 塄 堠 塥 塬 墁 墉 墚 墀
    0xDCB0 馨 鼙 懿 艹 艽 艿 芏 芊 芨 芄 芎 芑 芗 芙 芫 芸
    0xDD80 輤 輥 輦 輧 輨 輩 輪 輫 輬 輭 輮 輯 輰 輱 輲 輳
    0xDD90 輴 輵 輶 輷 輸 輹 輺 輻 輼 輽 輾 輿 轀 轁 轂 轃
    0xDDA0 轄 荨 茛 荩 荬 荪 荭 荮 莰 荸 莳 莴 莠 莪 莓 莜
    0xDDB0 莅 荼 莶 莩 荽 莸 荻 莘 莞 莨 莺 莼 菁 萁 菥 菘
    0xDE80 迉 迊 迋 迌 迍 迏 迒 迖 迗 迚 迠 迡 迣 迧 迬 迯
    0xDE90 迱 迲 迴 迵 迶 迺 迻 迼 迾 迿 逇 逈 逌 逎 逓 逕
    0xDEA0 逘 蕖 蔻 蓿 蓼 蕙 蕈 蕨 蕤 蕞 蕺 瞢 蕃 蕲 蕻 薤
    0xDEB0 薨 薇 薏 蕹 薮 薜 薅 薹 薷 薰 藓 藁 藜 藿 蘧 蘅
    0xDF80 還 邅 邆 邇 邉 邊 邌 邍 邎 邏 邐 邒 邔 邖 邘 邚
    0xDF90 邜 邞 邟 邠 邤 邥 邧 邨 邩 邫 邭 邲 邷 邼 邽 邿
    0xDFA0 郀 摺 撷 撸 撙 撺 擀 擐 擗 擤 擢 攉 攥 攮 弋 忒
    0xDFB0 甙 弑 卟 叱 叽 叩 叨 叻 吒 吖 吆 呋 呒 呓 呔 呖
    

    若一个文档里只包含这个表格中的汉字(可以再包含 ASCII 字符),在简体中文 Windows 下在记事本中以 ANSI 编码保存,则再次打开必然乱码。特别地,这个表格本身也会乱码。

    据此,你可以构造出各种跟微软「有仇」的文档。比如「联通」,比如「小泉水」。

    展开全文
  • 1.在桌面新建一个文本文档,不要写入任何内容,然后手动另存为,将此文档编码改为UTF-8,然后将文件名字改为template.txt; 2.再将template.txt移动到C:\Windows\ShellNew这个文件夹下;(没有这个文件夹的新建) 3....
  • win10自带记事本编码问题

    千次阅读 2020-04-05 23:25:14
    记事本的原罪编码的原罪修改记事本编码为UTF-8放弃记事本替换方案 为什么会说不要使用win10自带的记事本呢,接下来就说道说道记事本了~ 编码的原罪 记事本的默认编码是ANSI,在简体中文Windows操作系统中,ANSI ...
  • 关于记事本字符编码问题

    千次阅读 2017-08-03 13:13:01
    问题:记事本默认编码ANSI /(Unicoded,Unicode big endian,utf-8) vim 默认字符集为 utf-8 资料 查看TXT文件编码方式: 首先,不同编码的文本,是根据文本的前两个字节来定义其编码格式的。定义如下: ANSI...
  • 记事本字符编码没有Unicode选项

    千次阅读 2020-10-05 14:30:14
    记事本字符编码没有Unicode选项 Windows 10更新1903版本后,记事本的几种编码模式改了名称: 旧版的“Unicode”相当于新版的“UTF-16 LE” 这是“Unicode”选项不见的原因 旧版的“Unicode big endian”相当于新版...
  • 记事本编码问题

    2011-08-27 11:55:56
    记事本编码问题,当文档中所有字符都在C0≤AA≤DF 80≤BB≤BF这个范围的时候,notepad都无法确认文档的格式,没有自动按照UTF-8格式来"Display"。"联通"就是C1 AA CD A8,刚好在上面的范围内,所以不能正常显示。...
  • 1:保存为utf-8的txt文件用记事本打开和Editplus打开不乱码,另存为时默认编码为utf-8,但是用有道记事本打开则乱码:得出记事本和Editplus会自动选择以什么编码打开。 2:保存为gb2312的txt文件用记事本打开和...
  • 记事本 配置 保存 编码Notepad++ is a free, open source, and well-regarded alternative text editor: you might think of it as "Notepad on steroids". Being an open source product, setting up the program ...
  • 怎么用记事本修改文件的编码问题

    千次阅读 2018-03-05 20:39:25
    怎样用记事本改变文件的编码记事本打开文件。怎样用记事本改变文件的编码选择“文件”点击“另存为”这时就可以选择编码的方式了。选择一种编码方式,例如“UTF-8”,点击“保存”。选择“是”,则文件的编码便被...
  • 修改记事本默认编码为UTF-8

    千次阅读 2017-09-03 11:17:51
    1. 打开目录(没有则自己新建)  C:\WINDOWS\SHELLNEW 2. 在该目录下创建一个文本文档(txt):  ...右键 -> 新建 -> 文本文档 ...5. 选择编码格式为:  UTF-8 保存并关闭文件。  6.点击开始菜单: 
  • windows的记事本编码utf-8默认添加了BOM的标识符,有些软件无法识别BOM标识符而出现乱码。 这种情况只出现在windows的记事本上,其他不出现这个问题。 转载于:https://www.cnblogs.com/lhc-p...
  • 在打一个小项目的时候, 其中有一个步骤要将中文写入记事本当中,采用的是c++的fstream。写入后打开记事本看了没有问题, 后来打印出来...不用cmd的话, 非常简单, 只需要在另存记事本的时候修改编码格式为ANSI即可
  • 为方便有些朋友写文件保存时需要默认为Unicode编码,因系统默认都ANSI编码,每次都去选择Unicode编码很麻烦,而且有时候忘记了选择Unicode编码造成写出来的文件无法使用还想是不是哪里写错了。哈哈...本工具会在保存...
  • 更改记事本编码方式

    千次阅读 2011-09-25 19:53:32
    文件->另存为;
  • 代码记事本工具Of the two common text editor applications we will look at Notepad is the easiest to set up. (On most Windows computers, you can find it under Start / Programs / Accessories / Notepad )....
  • 2016/04/10今天真是气煞我也,这个Windows10的破记事本编辑器浪费我太多时间,亏我还是Win10脑残粉……原本只想快速修改jekyll博客首页的Html文档,就用记事本打开,随便改改,改完不忘以UTF-8编码保存。去预览博客...
  • 记事本的各种编码转换 GBK GB2312 UNICODE UTF8之间相互转换,单个文件批量文件转换都可,无需安装,解压即可使用
  • 记事本几种编码格式的解释

    千次阅读 2017-07-31 16:59:00
    在windows平台下,打开内置的记事本小程序Notepad.exe.打开后,点击【文件】→【另存为】,弹出一个对话框,在最低部有一个"编码"的下拉条。 里面有个四个编码选型:ANSI,Unicode,Unicode big endian,UTF-8 ...
  • 修改记事本默认编码为UTF-8(转)

    千次阅读 2019-03-27 17:12:20
    打开目录(没有则自己新建) C:\WINDOWS\SHELLNEW 在该目录下创建一个文本文档(txt): ...选择编码格式为: UTF-8 保存并关闭文件。 6.点击开始菜单: 开始 -> 运行… 或者 快捷键 WIN + R 输入:regedi...
  • 详解windows记事本的4种编码方式

    千次阅读 2018-11-15 17:07:28
    在工作中经常用遇到乱码问题,特别是之前用过python做一些解析文本的工作的时候。...本文以记事本编码方式作为切入点,对编码方式类型做介绍。 目录 1. ANSI ASCII码 GBK码 JIS码 2. Unicode,Unicode big e...
  • 关于Windows下记事本中保存编码的格式问题Windows下记事本保存文本文件的时候,可以选择不同的编码格式来保存文件,各种编码保存的文件的二进制是不同的,举例说明:我们在记事本中输入123,选择默认的编码格式,即...
  • 代码1 一个A类,只有入口和输出2 记事本设置语言及编码格式 1 一个A类,只有入口和输出 2 记事本设置语言及编码格式

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,053
精华内容 18,021
关键字:

怎么设置记事本的编码