精华内容
下载资源
问答
  • 1. ASCII码 我们知道,在计算机内部,所有信息最终都表示为一个二进制字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节...

    1. ASCII码

     

    我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。

    上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。

    ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

    2、非ASCII编码

    英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。

    中文编码的问题需要专文讨论,这篇笔记不涉及。这里只指出,虽然都是用多个字节表示一个符号,但是GB类的汉字编码与后文的Unicode和UTF-8是毫无关系的。

     

    3.Unicode

    正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。

    可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。

    Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。

    需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

    比如,汉字“严”的unicode是十六进制数4E25,也就是说这个符号的表示至少需要2个字节,这里就有两个严重的问题,第一个问题是,如何才能区别unicode和ascii?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件

    的大小会因此大出二三倍,这是无法接受的。

     

    4.UTF-8

    UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。

    UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

    UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。 
    如表: 
    1字节 0xxxxxxx 
    2字节 110xxxxx 10xxxxxx 
    3字节 1110xxxx 10xxxxxx 10xxxxxx 
    4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
    5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
    6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx Unicode

     

    UNICODE  UTF8转换规则

    符号范围 | UTF-8编码方式

    (十六进制) | (二进制)

    --------------------+---------------------------------------------

    0000 0000-0000 007F | 0xxxxxxx

    0000 0080-0000 07FF | 110xxxxx 10xxxxxx

    0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx

    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

    下面,还是以汉字“严”为例,演示如何实现UTF-8编码。

     

    下面,还是以汉字“严”为例,演示如何实现UTF-8编码。

    已知“严”的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,“严”的UTF-8编码是“11100100 10111000 10100101”,转换成十六进制就是E4B8A5。

     

    5.GBK

    GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大

    GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:

    GBK、GB2312<===>Unicode<===>UTF8

    6.

    latin1

    Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。ASCII编码是一个7位的容器,ISO-8859-1编码是一个8位的容器。

    转载于:https://www.cnblogs.com/givemelove/p/8109462.html

    展开全文
  • ASCII编码采用单字节(8 Bit)存储,实际数据存储空间是7 Bit,最高位的1 Bit是奇偶校验位。 ASCII编码对于英语国家足够用了,但是却无法表达非英语国家字符到计算机编码之间映射,如中文汉字、法语字母等。所以,...

    1.ASCII编码

    • ASCII码实现的是大小写英文字母,阿拉伯数字,及常用的标点符、运算符、控制字符(换行、删除等)和通信字符(文头、确认等)与计算机编码之间的对应。ASCII编码采用单字节(8 Bit)存储,实际数据存储空间是7 Bit,最高位的1 Bit是奇偶校验位。

    • ASCII编码对于英语国家足够用了,但是却无法表达非英语国家字符到计算机编码之间的映射,如中文汉字、法语字母等。所以,出现了很多非ASCII编码(但大多数都是兼容ASCII码的)。

    2.Latin1编码

    • Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。Latin1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。

    • ASCII编码是一个7位的容器,ISO-8859-1编码是一个8位的容器。

    • 因为Latin1编码范围使用了单字节内的所有空间,在支持Latin1编码的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作Latin1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。

    3.Unicode编码

    • 世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。

    • 可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode。

    • Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

    • 如果所有字符都按照最大存储空间存储,那必然会浪费很大的空间,比如所有字符都按照3字节存储,但是英文字母只需要一个字节存储就够了,就等于说一个Unicode编码的英文文档是ASCII编码文档存储空间的三倍。
      所以,便有了变长编码—-UTF-8。

    4.UTF-8编码

    • UTF-8就是在互联网上使用最广的一种Unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。

    • UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。如ASCII编码的内容UTf-8中就是用一个字符存储的。

    5. GBK编码

    • GBK编码是在GB2312-80(也称作GB2312,GB码)标准基础上的内码扩展规范,使用了双字节编码方案。

    参考文章:https://blog.csdn.net/l464373218/article/details/50946131

    展开全文
  • 尽管字面上非常相似,但mysql的utf-8的覆盖范围仅仅是所有UTF-8字符集的一部分。这非常容易误导初学者。UTF-8是UCS字符集的一种编码方式,可能将一个字符编码为1个字节,2个字节,3个字节,或者4个字节。编码为1个...

    尽管字面上非常相似,但mysql的utf-8的覆盖范围仅仅是所有UTF-8字符集的一部分。这非常容易误导初学者。

    UTF-8是UCS字符集的一种编码方式,可能将一个字符编码为1个字节,2个字节,3个字节,或者4个字节。

    编码为1个字节的字符就是ASCII码(有时称为latin文字符号),包含了拉丁语言中使用的符号,如拉丁字母、数字、标点等。

    编码为2个字节的字符包括了欧洲和中东地区语言(如希腊语、希伯来语、亚美尼亚语、阿拉伯语、叙利亚语等)中使用的符号。

    编码为3个字节的字符包括了中文日文韩文等亚洲语言使用的符号。

    编码为4个字节的字符包括了一些特殊的符号,比如一些表情符号。

    日常使用的绝大多数符号,都包括在前三种里。这三种合起来占据了unicode编码空间的第一个平面。unicode一共有17个平面。第一个平面称为Basic Multilingual Plane,简称为BMP,一共包含了2^16=65536个编码。这些编码里包括了日常使用的各种可见符号、可见和不可见控制符号、用于UTF-16编码扩展的特殊符号、一些私有用途符号,以及少数未分配符号。

    mysql的utf8字符集就是对应于unicode的BMP平面。它可以用来存储所有BMP字符。因为BMP字符在使用UTF-8编码时最多占据3个字节,所以mysql在为char(n)数据类型分配存储空间时是预留了3*n个字节的空间。

    如果应用从不使用UTF-8编码为四个字节的字符,一切都没有问题。但如果使用了,那么就必须使用mysql从5.5版本开始提供的另一种字符集:utf8mb4(字面理解应该是multi-byte-4的意思吧?)。这个字符集解决了utf8中三个字节的限制问题,可以存储占用4个字节的unicode字符,也就是现在可以存储全部的unicode字符了。同时,原有的utf8现在有了一个新名字:uft8mb3(仍然可以使用原来的utf8)。

    一个4个字节UTF-8字符的例子,是在mac或者iOS设备上输入文字时的特殊字符,如使用拼音输入kong,备选中会有一个非汉字的图形字符

    0818b9ca8b590ca3270a3433284dd417.png,它的unicode编号是1F233,UTF-8编码是F0 9F 88 B3(4个字节),UTF-16编码是D83C DE33(占用两个16位单元,也是4个字节)。这个字符就无法存储进mysql的utf8字符集中,必须使用utf8mb4才行。

    参考文章:https://mathiasbynens.be/notes/mysql-utf8mb4

    注:

    如果要把一个已有的表的字符集从utf8改为utf8mb4以支持BMP范围以外的unicode字符,需要执行以下操作:

    1)修改表的默认字符集设置:

    alter table xxx set default character set = utf8mb4;

    alter table xxx convert to character set utf8mb4;

    2)如果想把全库的默认字符集也改了,可以:

    alter database xxx set default character set = utf8mb4;

    3)修改my.cnf中的服务器默认字符集设置

    server_character_set = utf8mb4

    mysql文档中说该设置仅仅影响新建数据库时为新数据库选择何种默认字符集,所以我理解更改一个已有数据库不需要修改它的值(试想我在该mysql服务器上有好多数据库,但只想对其中一个启用utf8mb4)。但从实际使用来看,必须把这个配置设为utf8mb4。具体原因我还没搞明白。可能这个变量还

    用作在

    应用建立数据库连接时的缺省字符集?

    4)重新启动mysql服务。需要这一步是因为我们改动了my.cnf中的配置

    展开全文
  • mysql中的utf8字符集与标准UTF-8的区别

    千次阅读 2015-03-20 15:13:19
    尽管字面上非常相似,但mysql的utf-8的覆盖范围仅仅是所有UTF-8字符集的一部分。这非常容易误导初学者。UTF-8是UCS字符集的一种编码方式,可能将一个字符编码为1个字节,2个字节,3个字节,或者4个字节。编码为1个...
    尽管字面上非常相似,但mysql的utf-8的覆盖范围仅仅是所有UTF-8字符集的一部分。这非常容易误导初学者。

    UTF-8是UCS字符集的一种编码方式,可能将一个字符编码为1个字节,2个字节,3个字节,或者4个字节。

    编码为1个字节的字符就是ASCII码(有时称为latin文字符号),包含了拉丁语言中使用的符号,如拉丁字母、数字、标点等。
    编码为2个字节的字符包括了欧洲和中东地区语言(如希腊语、希伯来语、亚美尼亚语、阿拉伯语、叙利亚语等)中使用的符号。
    编码为3个字节的字符包括了中文日文韩文等亚洲语言使用的符号。
    编码为4个字节的字符包括了一些特殊的符号,比如一些表情符号。

    日常使用的绝大多数符号,都包括在前三种里。这三种合起来占据了unicode编码空间的第一个平面。unicode一共有17个平面。第一个平面称为Basic Multilingual Plane,简称为BMP,一共包含了2^16=65536个编码。这些编码里包括了日常使用的各种可见符号、可见和不可见控制符号、用于UTF-16编码扩展的特殊符号、一些私有用途符号,以及少数未分配符号。

    mysql的utf8字符集就是对应于unicode的BMP平面。它可以用来存储所有BMP字符。因为BMP字符在使用UTF-8编码时最多占据3个字节,所以mysql在为char(n)数据类型分配存储空间时是预留了3*n个字节的空间。

    如果应用从不使用UTF-8编码为四个字节的字符,一切都没有问题。但如果使用了,那么就必须使用mysql从5.5版本开始提供的另一种字符集:utf8mb4(字面理解应该是multi-byte-4的意思吧?)。这个字符集解决了utf8中三个字节的限制问题,可以存储占用4个字节的unicode字符,也就是现在可以存储全部的unicode字符了。同时,原有的utf8现在有了一个新名字:uft8mb3(仍然可以使用原来的utf8)。

    一个4个字节UTF-8字符的例子,是在mac或者iOS设备上输入文字时的特殊字符,如使用拼音输入kong,备选中会有一个非汉字的图形字符mysql中的utf8字符集与标准UTF-8的区别 - 冬冬青 - 冬冬青的博客,它的unicode编号是1F233,UTF-8编码是F0 9F 88 B3(4个字节),UTF-16编码是D83C DE33(占用两个16位单元,也是4个字节)。这个字符就无法存储进mysql的utf8字符集中,必须使用utf8mb4才行。

    参考文章:https://mathiasbynens.be/notes/mysql-utf8mb4

    注:
    如果要把一个已有的表的字符集从utf8改为utf8mb4以支持BMP范围以外的unicode字符,需要执行以下操作:
    1)修改表的默认字符集设置:

    alter table xxx set default character set = utf8mb4;
    alter table xxx convert to character set utf8mb4;

    2)如果想把全库的默认字符集也改了,可以:

    alter database xxx set default character set = utf8mb4;

    3)修改my.cnf中的服务器默认字符集设置

    server_character_set = utf8mb4

    mysql文档中说该设置仅仅影响新建数据库时为新数据库选择何种默认字符集,所以我理解更改一个已有数据库不需要修改它的值(试想我在该mysql服务器上有好多数据库,但只想对其中一个启用utf8mb4)。但从实际使用来看,必须把这个配置设为utf8mb4。具体原因我还没搞明白。可能这个变量还用作在应用建立数据库连接时的缺省字符集?
    4)重新启动mysql服务。需要这一步是因为我们改动了my.cnf中的配置
    展开全文
  • 从ASCII到Unicode发展故事 ASCII是最早编码方式,由于计算机起源于美国,ASCII只支持英文和数字,以及一些用于程序控制符 等到计算机传播到其它国家时,由于ASCII无法表示其它国家字符,各国便纷纷推出了...
  • ♣题目部分 ascii、unicode、utf-8、gbk、ANSI、Latin1区别? 字节码和机器码的区别? ♣答案部分编码是从一种形式或格...
  • 我的MySQL版本为5.7.25,在win10中使用,此文章我是在utf8的基础上改为utf8mb4的(修改之处可参见另一篇由latin1改为utf8的博文) 一、查看数据库编码 用 show variables like 'character%'; 或者 show variables ...
  • 1.编码基础知识  最早编码是iso8859-1,...1.1. iso8859-1 通常叫做Latin-1  最多能表示字符范围是0-255,应用于英文系列。比如,字母a编码为0x61=97。   很明显,iso8859-1编码表示字符范围很窄,无法
  • new String(str.getBytes("iso8859-1"), "UTF-8");

    千次阅读 2017-04-04 20:12:02
    摘要: 1.... GB2312/GBK 1.3 unicode 1.4 UTF 2.Unicode、UTF-8 和 ISO8859-1到底有什么区别 3. java对字符处理 3.1 getBytes(charset) 3.2 new String(charset) 3.3 setCharacterEncoding() 规律:
  • M3U8视频格格式其实是一种M3U,只是它编码格式是UTF-8格式。M3U用Latin-1字符集编码。M3U8格式特点是带有一个目录信息或文件。 MP4视频文件 即 mp4 (文件格式) 。 MPEG-4包含了MPEG-1及MPEG-2绝大部份功能及...
  • 查看,是不是所有字符都设置到了UTF8了,因为mysql默认字符编码是Latin1,不支持中文 char (0~255)字符,定义create table语句时候,()中是字符数,不是字节数。 varchar(0~65535)字符 每个...
  • Latin1编码,它是ASCII编码扩展;UTF-8编码是一种针对Unicode可变长度字符编码。本篇文章将对mysql一些编码进行讲解与介绍,不过这并不是所有字符集编码。1、字符集简介字符(Character)是各种文字和符号...
  • 1.我数据库连接 编码为 GB2312,latin1_swedish_ci 2.php 文件编码格式为 UTF-8,浏览器显示编码为 : UTF-8 3.我页面显示方式为两种: 一)页面加载时自动加载,每隔一秒刷新一次 二)点击一个分机组名称时,...
  • Latin1:一个字符占一个字节。最多存放(65535-1-2)/1=65532个字符GBK:一个字符占两个字节。。。。。。UTF8:一个字符占三个字节。。。。。。{-1是指varchar从第二个字节开始存放。 -2是指varchar前两个...
  • 如果是 latin1 的话 ... 计算字节长度 ... greatghoul 的答案是对的 ...如果是 utf-8 的话 ... 计算字符长度 ... joyeu 的答案是对的 ...至于 Theo 的答案里说的 4.1 为临界点的区别 ... 这事情真心和版本没什...
  • 如果是 latin1 的话 ... 计算字节长度 ... greatghoul 的答案是对的 ...如果是 utf-8 的话 ... 计算字符长度 ... joyeu 的答案是对的 ...至于 Theo 的答案里说的 4.1 为临界点的区别 ... 这事情真心和版本没什...
  • 如果是 latin1 的话 ... 计算字节长度 ... greatghoul 的答案是对的 ...如果是 utf-8 的话 ... 计算字符长度 ... joyeu 的答案是对的 ...至于 Theo 的答案里说的 4.1 为临界点的区别 ... 这事情真心和版本没什...
  • 最近我们正在研发蜻蜓F影视系统(12月底前将正式发行销售,小小广告勿喷,相信我们制作...首先大致介绍下:m3u8格式: M3U8视频格格式也是一种baiM3U,只是它编码du格式是UTF-8格式。M3U用Latin-1字符zhi集编码...
  • character-set-server = GB2312collation-server = latin1_general_ciMySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题 收藏MySQL中涉及几个字符集character-set-server/default-character-set:服务器...
  • 2014/7/23

    2014-07-23 11:30:00
    1utf8与utf-8的区别,其实他们最大的区别就是,php不识别utf-8 2、MySQL、数据库、表、php、浏览器字符编码须一致统一 (注:浏览器设置的编码是默认的,故意义不大) 3、解决方法: (1)将my.ini配置文件中的...
  • 自己解决办法:在my.ini中将两处latin1改成utf8即可 一、乱码产生原因MySQL 字符编码是版本4.1引入,支持多国语言,而且一些特性已经超过了其它大多数数据库管理系统。正因为这一特性才导致 MySQL 乱码问题。...
  • character-set-server = GB2312collation-server = latin1_general_ci MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题 收藏 MySQL中涉及几个字符集character-set-server/default-character-set:...
  • 各种编码知识简介

    千次阅读 2014-12-07 21:15:12
    本文主要介绍我们在日常开发中接触到了latin1,GBK,GB18030,UTF-8 编码几种。下面首先来看看这几种编码的的区别latin1 1. 先来看看latin1 (参考百度百科)  Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。...
  • 编码方式理解对比

    2015-08-01 13:59:29
    Unicode、UTF-8 和 ISO8859-1到底有什么区别   ...Latin-1Utf8,Unicode字符集编码简史   【Java基础专题】编码与乱码(01)---编码基础   【Java基础专题】编码与乱码(05)---GBK...
  • mysql中like 查询效率与字符集有关吗?比如。utf8latin1,这两个字符集在varchar上有什么区别
  • 常用编码总结

    2018-05-05 19:59:09
    [size=medium]1.编码区别: iso8859-1: 通常叫做Latin-1,属于单字节编码,最多能表示字符范围是0-255,应用于英文系列。比如,字母a编码为0x61=97。 UTF-8:utf编码兼容iso... utf8字符集中一个中文字符占...
  • linux编码方式总结

    2019-06-03 15:56:32
    关于文件编码的介绍 --ASCII,Latin1,Unicode,UTF-8与GBK编码的区别 https://blog.csdn.net/BLGT_57/article/details/80848492 查看文件的编码方式 notepad++ 选择不同的编码方式,可以正常显示的是对应的编码方式...
  • 02-13作业

    2020-02-13 22:03:01
    Jetty内置编码是UTF-8,Tomcat则是latin1。所以使用jetty不会产生乱码问题 2.如何修改jetty默认端口?如何修改tomcat默认端口? 打开jetty文件夹下start.ini,找到如图代码,修改即可 打开tomcat...
  • 【描述】 mysql数据编码中,数据库、数据表、数据字段都是有自己编码,如果新建时不主动定义编码集,就会...如果数据库使用utf-8,数据表使用ascii,数据字段使用latin1。这时,你mysql对外表现数据编码集就是

空空如也

空空如也

1 2
收藏数 30
精华内容 12
关键字:

latin1utf8的区别