当前位置: 首页 > news >正文

服装商店的网站建设要求国外vps 加速免费

服装商店的网站建设要求,国外vps 加速免费,微妙音门户网站建设,网页搭建服务平台一、计算机字符编码 理论#xff08;以下内容仅针对计算机软件领域#xff09; 字节#xff08;Byte#xff09;#xff1a;计算机信息技术用于计量存储容量的一种计量单位#xff0c;不分数据类型#xff0c;一个字节代表8个比特位#xff08;Bit#xff09;#…一、计算机字符编码 理论以下内容仅针对计算机软件领域 字节Byte计算机信息技术用于计量存储容量的一种计量单位不分数据类型一个字节代表8个比特位Bit即0、1自由组合组成的8位二进制串 字符可以理解字符是站在人的角度去看待万物任何一个文字或符号都是字符。字符是各种文字和符号的统称包括各国家文字、标点符号、图形符号、数字等即一个标点符号!是一个字符一个文字(汉)也是一个字符 字符集为了在计算机中表示字符每一个字符都有一个唯一的编号即每一个字符和一个唯一的编号存在一对一的映射关系所有的字符与编号之间这种映射规则的集合称为字符集 字符编码 字符编码就是根据相应的字符集编号以一定的规则编码成二进制形式存储相应的将二进制形式还原成字符的操作叫做字符解码可以简单理解大部分场景下的乱码现象都是源于编码和解码方式的不一致就像我用英文给你写了一封信你用中文去读解码于是这封信在你看来就是所谓的乱码 二、发展史 第一阶段起源 ASCII编码 计算机是美国发明的在计算机的世界里只有0和1我们平常看到的字符文字也就只能用0和1来表示于是美国科学家们为了表示实际中的事物制定了一套编码标准即ASCII编码占1个字节首字节用作奇偶校验位有效值为7位0~127ASCII编码全表链接 字节数二进制编码格式取值范围单字节0XXXXXXX0~127 规则 0-31及127共33个为控制字符或通信专用字符如控制符LF换行、CR回车等 32-126共95个是字符其中48-57为十个阿拉伯数字65-90为26个大写英文字母97-122为26个小写英文字母其他是一些运算符号、标点符号等 第二阶段诸子百家 ISO-8859-1Latin1编码 计算机传播到了欧洲欧洲人发现自己的符号文字没有被编进去于是欧洲科学家讨论后决定既然美国人将首字节第一位留下来那我们就使用128~255的位置好了ISO-8859-1编码全表链接 字节数二进制编码格式取值范围单字节0XXXXXXX0~127兼容ASCII编码单字节1XXXXXXX128~255 规则 0-127位置不变兼容ASCII编码128-159为控制字符160-255为文字符号包含了西欧语言、阿拉伯语、希腊语等刚好用完每一个位置世界真美好 GB系列 GB2312编码 计算机传播到中国咱们的科学家发现美国人制定的这套编码一共才一个字节最多0-256的空间而我们的汉字字数远远超过256想想我们那厚重的中华字典于是聪明的中国科学家决定使用2个字节表示汉字否则真的难搞美国的ASCIII编码0~127保留下来其他乱七八糟欧洲国家什么的编码全部删除对于英文和西欧字符使用一个字节表示即可对于汉字字符使用2个字节表示这就是GB2312编码它收录了6763个汉字以及682个特殊符号已经囊括了生活中最常用的所有汉字不包括一些繁体字但是对于日常使用已经足够GB2312编码全表链接 |字节数|二进制编码格式 |–|–|–| |单字节|0XXXXXX兼容ASCII编码 |双字节|1XXXXXXX 1XXXXXXX 规则 如果是英文字母用一个字节表示最高位为0兼容ASCII编码 如果是汉字用两个字节表示两个字节最高位都为1高位字节表示范围0xA1-0xF7低位字节表示范围0xA1~0xFE预留了很多空间 GBK编码 由于GB2312只有6763个汉字而我们的中文博大精深于是在保证兼容ASCII编码、GB2312编码前提下也用两个字节表示一个汉字的方式编码了很多汉字经过扩充后可以表示的汉字达到了20902个另外有984个汉语标点符号、部首等这就是GBK编码GBK编码全表链接 |字节数|二进制编码格式 |–|–|–| |单字节|0XXXXXX兼容ASCII编码 |双字节|1XXXXXXX XXXXXXXX 规则 如果是英文字母用一个字节表示最高位为0兼容ASCII编码 如果是汉字用两个字节表示第一个字节最高位为1高位字节表示范围0x81~0xFE低位字节表示范围0x40-0x7E和0x80-0xFE GB18030编码 后来GBK的两万多字也无法满足我们的需求了为了照顾日韩和少数民族2字节表示一个字已经不够用了我们又对GBK加以扩充因此GB18030使用变长编码多出来的汉字使用4个字节表示。GB18030编码全表链接 |字节数|二进制编码格式 |–|–|–| |单字节|0XXXXXX兼容ASCII编码 |双字节|1XXXXXXX XXXXXXXX |四字节|1XXXXXXX 0011XXXX 1XXXXXXX 0011XXXX 规则 如果是英文字母用一个字节表示最高位为0兼容ASCII编码 如果是汉字两个字节表示的字符和GBK一样用4个字节表示的字符第一个字节表示范围0x81-0xFE第二个字节表示范围0x30-0x39第三个字节表示范围0x81-0xFE第四个字节表示范围0x30-0x39每次解析数据时根据这个字符的第二个字节判断范围是否在0x30-0x39之间如果存在则说明这是四个字节表示的字符否则说明是两个字节表示的范围可以看上面GBK低位字节表示范围是大于0x39的这就是GBK低位字节0x30-0x39不编码的原因 。。。。上面仅介绍了美国人的编码标准、欧洲人的编码标准、中国人的编码标准这些只是冰山一角世界上存在着各种各样的编码标准 第三阶段统一 Unicode 每个国家都按照自己的标准制定一套编码规则字符就会导致两个编码不一致的国家的人相互之间无法交流的问题除了美国可以和任意的国家无障碍交流因为大部分编码标准都兼容ASCII有没有一种标准可以收录世界上所有的字符并提供存储实现呢 Unicode应运而生它编排了世界上几乎所有的字符总共收录近110 多万个字符集合编号范围从 0x000000 到 0x10FFFFUnicode是一种编码标准只是为世界上所有的符号进行了收录编号并没有指定每个字符每个编号该如何映射为某个二进制串于是它有几个具体的实现 UTF-8编码 字节数Unicode 十六进制编码范围二进制编码格式单字节0000 0000 - 0000 007F0XXXXXXX兼容ASCII编码双字节0000 0080 - 0000 07FF110XXXXX 10XXXXXX三字节0000 0800 - 0000 FFFF1110XXXX 10XXXXXX 10XXXXXX四字节0001 0000 - 0010 FFFF11110XXX 10XXXXXX 10XXXXXX 10XXXXXX五字节0020 0000 - 03FF FFFF111110XX 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX六字节0400 0000 - 7FFF FFFF1111110X 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX 规则 对于单字节编号小于 127 的字符来说UTF-8 编码标准等同于 ASCII编码标准字节首位设为0后7位为符号的Unicode码 对于其他n字节的字符n1第一个字节的前n位都设为1n1位设为0后面字节的前两位一律设为10 以汉字“中”为例         编码时“中”的的Unicode是0x4E2D(100111000101101)对照上面可知0x4E2D在Unicode十六进制编码范围0000 0800 - 0000 FFFF之间即占3个字节编码形式为1110XXXX 10XXXXXX 10XXXXXX填充方式就是将“中”的二进制从后向前填充多余的X使用0填充那么“中”的UTF-8编码就是11100100 10111000 10101101转换为十六进制为0xE4B8AD         解码时根据UTF-8编码规则进行解码判断首字节是0的话那么这个字节就对应一个字符单字节首字节前两位是11的话那么就代表2个字节代表一个字符首字节前n位1的个数代表字符占用字节数如“中”的UTF-8编码是E4B8AD11100100 10111000 10101101首字节有3个1表示是3个字节代表一个字符然后根据规则1110xxxx 10xxxxxx 10xxxxxx获取到x的部分即100111000101101转换为十六进制为0x4e2d查找Unicode字符集中对应的汉字“中” UTF-16编码 字节数Unicode十六进制编码范围二进制编码格式Unicode字符范围双字节0x0000-0xFFFFXXXXXXXX XXXXXXXX0-65535四字节0x10000-0x10FFFF110110YYYYYYYYYY 110111XXXXXXXXXX65536-1114111 规则     使用定长2个字节或2个代理对4个字节编码Unicode字符。Unicode将字符分成了17个组区编排每一个组又称为一个平面每个平面有65536个码位即每个平面能容纳65536个字符第一组又称为基本平面BMP编码范围为0x0000-0xFFFF所有常见的字符和文字都在这个平面内其他的组或区叫辅助平面编码范围是0x10000-0x10FFFF。     基本平面内有个被称为代理区的特殊区域编码范围是0xD800-0xDFFF共有2048个码位此区间不对应任何字符主要是用于映射辅助平面的字符这段区域分为两部分110110XX XXXXXXXX0xD800 - 0xDBFF为高位代理High Surrogate110111XX XXXXXXXX0xDC00 - 0xDFFF 为低位代理(Low Surrogate)。(所谓代理就是一种特殊的字符别被名字迷惑)。     一个高位代理和一个低位代理可以组成一个代理对如果Y和X全为0则为0x010000 的代码点全为1则为0x10ffff 的代码点正好将辅助平面全部编码     UTF-16编码的规则是基本平面内的字符用两个字节来表示其他辅助平面的字符用4个字节来表示     如果Unicode码位位于 0x00 - 0x00FFFF直接进行二进制编码位数不够的左边充 0     如果代码点位于 0x010000 - 0x10FFFF则         1、代码点减去 0x10000会得到一个位于 0x00 和 0x0FFFFF 之间的数字         2、这个数字转换为 12 位二进制数位数不够的左边充 0记作YYYYYYYY YYXX XXXXXXXX         3、取出 YYYYYYYY YY并加上 11011000 00000000(0xD800)得到高位代理         4、取出 XX XXXXXXXX并加上 11011100 00000000(0xDC00)得到低位代理         5、高位代理和低位代理相连得到 110110YY YYYYYYYY 110111XX XXXXXXXX 以汉字“中”为例         编码时“中”的Unicode是0x4E2D(100111000101101)对照上面可知0x4E2D在Unicode十六进制编码范围0000 0800 - 0000 FFFF之间即占2个字节直接进行二进制编码位数不够的左边补0那么“中”的UTF-16编码就是01001110 00101101即0x4E2D 以汉字“虫”为例这个字不是“虫”少个腿只不过CSDN这里面输入有问题看图         编码时“虫”的Unicode是0x20010对照上面可知0x20010在Unicode十六进制编码范围0x10000-0x10FFFF之间即占4个字节使用2个代理对表示Unicode码位0x20010减去0x10000会得到数字0x10010将这个数字转换为12位二进制数位数不够的左边补0即0001 0000 0000 0001 0000取出前10位0001 0000 00并加上11011000 00000000(0xD800)得到高位代理0xD8401101 1000 0100 0000取出后10位00 0001 0000并加上 11011100 00000000(0xDC00)得到低位代理0xDC101101 1100 0001 0000将高位代理和低位代理相连得到0xD840 DC10         解码就是将上述步骤反过来解析如果解析时代理不成对则计算机不显示该代理字符 UTF-32编码 字节数Unicode十六进制编码范围二进制编码格式Unicode字符范围四字节0x0000-0x10FFFFXXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX0-1114111 规则使用4个字节存储直接进行二进制编码位数不够左边补0 以汉字“中”为例         编码时“中”的Unicode是0x4E2D(100111000101101)直接转换为二进制补0 为00000000 00000000 01001110 00101101 注这3种编码方式都是对Unicode标准的具体字符编码方案实现排版顺序不代表时间先后顺序总结几种常见编码兼容性如图 ASCII被几乎所有编码兼容UTF-16、32除外。最常见的UTF-8与GBK之间除了ASCII部分之外没有交集这也是平时业务中最常见的导致乱码场景而GB系列中GB18030兼容GBKGBK又兼容GB2312UTF-8:兼容ASCII编码、不存在字节序问题、变长三、相关概念 字节序BOM、大端、小端 字节序指多字节数据在计算机内存中存储或者网络传输时字节的顺序字节序有两种大端BigEndian高位字节在低内存地址, 小端LittleEndia低位字节在低内存地址。CPU处理多字节数有不同方式例如“汉”字的Unicode编码是6C49。大端 6C49 将高序字节存储在起始地址小端 496C 将低序字节存储在起始地址如图所示 注意UTF-8以单个字节为编码单元CPU处理处理也是以单字节处理不存在字节序的问题但也可以用BOM来表示编码方式UTF-8编码的BOM是EF BB BF这样当接收者受到以EF BB BF开头的字节流就知道是UTF-8编码了 UTF-16以两个字节为编码单元CPU在解释一个UTF-16文本前需要知道它的字节序例如“奎”的Unicode编码是594E“乙”的Unicode编码是4E59当我们接收到UTF-16字节流“594E”时如何判断是“奎”还是“乙”这时候就必须需要用到BOM UTF-编码BOMUTF-8 without BOM无UTF-8 with BOMEF BB BFUTF-16 LEFF FEUTF-16 BEFE FFUTF-32 LEFF FE 00 00UTF-32 BE00 00 FE FF应用场景        网络序即网络字节序都是大端模式TCP/IP协议对各层协议统一规定使用大端模式也就是先接收到的字节为数据的高位存放到低地址        主机序即机器的字节序有大端模式也有小端模式根据具体机器CPU处理器决定计算机内部的数据是不变的区别只是在于CPU处理数据的方式不同x86和一般的OSwindowsLinux使用的是小端模式Mac OS是大端模式 ANSI编码 准确说并不存在某种具体的编码方式叫做ANSI它只是Window操作系统上的一个别称在中文操作系统上ANSI就是GBK编码在韩语操作系统上ANSI就是EUC-KR一种韩语编码并且所谓的ANSI只存在于Windows操作系统上 内码/外码 内码简单理解就是某种语言运行时其char或string在内存中的编码方式。java中的内码使用的是UTF-16编码相对于内码而言其他的编码都是外码 四、FAQ 1、给定一个文件如何用Java程序检测是什么编码 答只有一个可行方法就是推测文件编码方式所有的方法都不能保证推测出来的结果是绝对准确的有的方法推测的准确率较高而有的方法推测出来的准确率较低主要有以下几种 通过文件的前三个字节判断因为有些编码格式会存在文件的前三个字节中比如UTF-8编码格式文件的前三位为-17、-69、-65很明显这种方式局限性比较大且推测的准确率也较低通过特殊字符来判断通过比对某些编码格式文件中出现的一些特殊字节值来推测同样准确率也不高通过cpdetector工具库来判断cpdector 是一款开源的文档编码检测工具可以检测 xmlhtml文档编码类型基于统计学原理来推测文件编码但是也不保证结果准确性通过ICU4J库来判断ICU的推测逻辑基于IBM过去几十年收集的字符集数据理论上也是基于统计学的。这种方式统计的结果准确性也较高推荐使用。 2、指定一个记事本文件存储打开文件的时候解码是如何判断是什么编码的 答记事本的做法是在TXT文件的最前面保存一个标签如果记事本打开一个TXT发现这个标签就说明是unicode。标签叫BOM如果是0xFF 0xFE是UTF16LE如果是0xFE 0xFF则UTF16BE如果是0xEF 0xBB 0xBF则是UTF-8。如果没有这三个东西那么就用ANSI即记事本的默认编码字符集即使用操作系统的默认语言编码来解释所以当我们保存记事本文件以其他编码如台湾繁体编码BIG5时再次打开记事本文件会发现乱码。 3、为什么计算机最小的存储单位是字节最小的传输单位是bit? 答一个位bit代表0或1即二进制每8个位代表一个字节byte         byte字节是电脑中表示信息含义的最小单位因为一个位即0或1并不能表示我们现实生活中的一个相对完整的信息且内存中运算的最小存储单位是字节位运算就是在一个字节的存储单元基础上进行的所以可以理解字节是存储的最小单位         bit位是二进制数的一位包含的信息或2个选项中特别指定1个的需要信息量称为一比特只有两种状态0和1。电脑内部的电路工作有高电平和低电平两种状态.所以就用二进制来表示信号以便计算机识别。所以计算机能传输的最小单位当然是你信号的单位bit而不是字节。 4、当CPU从内存中读取到0101这样的一串数据时CPU如何辨别它是数字01234…还是对应ASCII码表的某个数字呢 答CPU层面是没有ASCII的概念一切都是指令码和算术逻辑数据。C语言等高级语言才有数值和字符的概念区分经过编译后得到的机器码已经没有字符的概念。 举个栗子a1’编译后就是在a的位置上存上1的ASCII码对应的二进制数b1编译后就是在b的位置上存上数值1对应的二进制数后续程序对a、b的操作可能是a a 1b b * 2 在a的位置上存入a的后一个字符’2’的ASCII码对应的二进制数在b的位置上存入b的二倍即2对应的二进制数程序编译后CPU并不知道也不需要知道你存的二进制数代表对应的ASCII码值还是数值只是机械运算即可结果意义由具体程序的代码逻辑进行保证 正常编程逻辑是不可能出现a a * 2因为含义不明如果这个语句逻辑编译通过意味着CPU需要将a的ASCII码值当做数字乘以2结果意义同样由程序的代码逻辑进行保证比如板砖既可以用来盖建大厦也可以用来拍人具体使用是由在不同场景下使用者(程序)决定的。 5、计算机中二进制0和1能表示数字为什么还用ASCII码表示不冲突吗 答不冲突。计算机程序中数值和字符是两种不同类型的数据ASCII码是字符编码集是计算机用于表示和显示字符的他的真值是对应字符的映射的八位二进制编码。计算机的显示一个数值并不是直接从他的数值来的而是要将这个数值转换为对应的字符再显示。数值1 ! 字符’1’就像数学的1和语文的一是不一样的。 6、为什么要有字符编码字符编码需要做什么事情 答计算机内所有信息都是以二进制形式表示的对于一个短路来说0代表关1代表开。那把这些电路组合起来就可以有长串0和1组成的二进制编号我们就能用它来表示我们想要表示的东西了。但是我们人类不适合直接看二进制那么多的0、1所以就需要一种方法将二进制转换为我们能看懂的东西字符编码就应运而生你可以想一下翻译机的作用。         字符编码主要做两件事给所有要表示的字符一个唯一的编号即一个编号对应一个字符的映射关系字符集将这个编号用0和1表示出来说明下有时候并不是直接将编号用二进制表示出来那么简单还需要考虑读取时字符如何分隔等例如喜对应的字符集编号为100000001,1个字节欢对应的字符编号为2000000101个字节中文汉字那么多一定还有一个汉字被编号为25800000001 00000010那计算机在读到00000001 00000010这一串二进制2会解析为喜欢两个字还是258代表的那一个字呢就这体现了字符编码的规则。 7、为什么UTF-8没有字节序UTF-16、UTF-32有字节序为什么GBK也没有字节序问题 答编码单元与编码单元之间在存储和传输中的顺序是确定的即字节序和是否多字节编码无关如a、b、c分别代表3个字节发送时顺序是abc那么接收时也会是abc这个顺序不会乱         字节序指的是编码单元内部的字节顺序UTF-8是变长编码编码单元为单字节不存在高低位的问题且UTF-8的首字节记录了总字节数保证了解码的正确也就不存在字节序问题而以UTF-16为例编码单元为2个字节也就是最2个字节代表一个字符每个编码单元与编码单元之间顺序是确定的问题在于编码单元内部这两个字节的顺序不确定由于硬件CPU的不同差异假如CPU是大端序则高位在低内存地址位假如CPU是小端序则低位在低内存地址位所以为了区分有了BOM这样计算机就可以根据BOM知道高位是谁低位是谁知道高低位从而就能正确组装数据保证解码正确GBK需要参照区位表将字符转化为字节数组也属于单字节编码不需要考虑字节序问题。 8、网路通信时是否需要进行字节序转换 答网络协议统一规定使用大端模式即接收到第一个字节是高字节存放到低地址位上所以在发送数据时就会去低地址位取数据的高字节。 大端-大端不需要转换字节序发送方网络协议函数去低地址位取高字节数据网络传输协议是大端模式接收方网络协议函数会将接收的第一个字节放到低地址位存储双方正确收发数据大端-小端需要转换字节序发送方、网络传输没有问题接收方接收存储数据高字节存储到低地址位即按照大端模式存储提取或解析数据使用本地主机序小端模式肯定会出现错误小端-大端需要转化字节序发送方网络协议去低地址位取高字节数据实际取到的是低字节数据传输数据接收方接收存储数据接收到第一个字节放到低地址位上即按照本地主机序大端模式存储但第一个字节实际上是低字节数据也就是将低字节数据存储到了低地址位提取或解析数据使用本地主机序大端模式肯定会错误小端-小端不需要转换字节序发送方网络协议去低地址位取高字节数据实际取到的是低字节数据传输数据接收方接收存储数据接收到第一个字节放到低地址位上即按照本地主机序小端端模式存储但第一个字节实际上是低字节数据也就是将低字节数据存储到了低地址位提取或解析数据使用本地主机序小端端模式双方正确收发数据 结论相同字节序的平台在进行网络通信时可以不进行字节序转换但是跨平台进行网络数据通信时必须进行字节序转换。 9、Java如何判断当前平台字节序 答通过 ByteOrder.nativeOrder() 方法 查看源码可知主要实现为static静态代码块首先为long分配8个字节内存然后为long分配值随后获取该值的第一个字节如果为高位则平台采用的大端字节序如果为低位则采用的小端字节序 五、参考资料 https://zh.wikipedia.org/wiki/ASCII https://zh.wikipedia.org/wiki/ISO/IEC_8859-1 https://zh.wikipedia.org/wiki/GB_2312 https://zh.wikipedia.org/wiki/%E6%B1%89%E5%AD%97%E5%86%85%E7%A0%81%E6%89%A9%E5%B1%95%E8%A7%84%E8%8C%83 https://zh.wikipedia.org/wiki/GB_18030 https://zh.wikipedia.org/wiki/Unicode https://zh.wikipedia.org/wiki/UTF-8 https://zh.wikipedia.org/wiki/UTF-16 https://zh.wikipedia.org/wiki/UTF-32 https://www.jianshu.com/p/1b00ca07b003
http://www.w-s-a.com/news/915286/

相关文章:

  • 做画册找什么网站海南建设工程股份有限公司网站
  • 网站机房建设有助于网站备案
  • 北辰苏州网站建设抖音代运营投诉平台
  • 安徽住房与城乡建设部网站如何新建站点
  • 企业网站开发的感想网站开发公司所需投入资源
  • 如何拿网站后台账号wordpress 电影下载站源码
  • 公司网站建设方案书安卓应用市场免费下载安装
  • phpmysql网站设计建设好一个网站需要
  • 自己做的网站能被别人看到吗idea怎么做网页
  • 燕莎网站建设互联网排名前十的公司2021
  • 微软云怎么做网站微商城和小程序区别
  • 哈尔滨建站的系统网站到首页排名
  • 运动网站开发的需求分析南通市住房和城乡建设局网站
  • 佘山做网站谷歌云做网站
  • 免费发布信息网站大全666做p2p网站费用
  • 北京 网站建设咨询顾问公司网络公司有几家
  • 设计类网站如何用ps做网站首页
  • 品牌网站建设的关键事项设计网有哪些
  • 网站没收录徐州建设工程审图中心网站
  • 网站建设记账做什么科目erp系统有哪些软件
  • 泰拳图片做网站用哪里有做空包网站的
  • 查外链网站重庆做网站微信的公司
  • 有没有外包活的网站如何做网站快捷键的元素
  • 公司网站赏析网站制作2019趋势
  • 企业进行网站建设的方式有( )推广引流违法吗
  • 按营销型网站要求重做网站 费用点金网站建设
  • 深圳做网站互联网服务
  • 网站sem托管wordpress安装无法连接数据库
  • 深圳网站建设开发公司哪家好微信小程序商家入口
  • 江门站排名优化建立什么网站赚钱