utf8中文编码范围 - 51CTO博客

文章推薦指數: 80 %
投票人數:10人

utf8中文编码范围,UTF-8有点类似于Haffman编码,它将Unicode编码为:00000000-0000007F的字符,用单个字节来表示;00000080-000007FF的字符用两个字 ... utf8中文编码范围 关注 mb5fdb0f93c5ca2 utf8中文编码范围 转载 mb5fdb0f93c5ca2 2011-11-1013:55:00 文章标签 utf8 编码 ico 字节流 字节序 文章分类 IT职场 其它 UTF-8有点类似于Haffman编码,它将Unicode编码为: 00000000-0000007F的字符,用单个字节来表示; 00000080-000007FF的字符用两个字节表示(中文的编码范围) 00000800-0000FFFF的字符用3字节表示 编码转换:iconv-f“文件目前编码”-t“文件转换后的编码”-o“转换后生成的新文件名”“源文件名”temp=Iconv.conv(“UTF-8″,“gb2312″,a) 因为目前为止Unicode-16规范没有指定FFFF以上的字符,所以UTF-8最多是使用3个字节来表示一个字符。

但理论上来说,UTF-8最多需要用6字节表示一个字符。

在UTF-8里,英文字符仍然跟ASCII编码一样,因此原先的函数库可以继续使用。

而中文的编码范围是在0080-07FF之间,因此是2个字节表示(但这两个字节和GB编码的两个字节是不同的)。

0、bigendian和littleendian bigendian和little endian是CPU处理多字节数的不同方式。

例如“汉”字的Unicode编码是6C49。

那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是big endian。

还是将49写在前面,就是littleendian。

“endian”这个词出自《格列佛游记》。

小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。

我们一般将endian翻译成“字节序”,将bigendian和little endian称作“大尾”和“小尾”。

4、UTF编码 UTF-8就是以8位为单元对UCS进行编码。

从UCS-2到UTF-8的编码方式如下: UCS-2编码(16进制)UTF-8字节流(二进制) 0000–007F0xxxxxxx 0080–07FF110xxxxx10xxxxxx 0800–FFFF1110xxxx10xxxxxx10xxxxxx 例如“汉”字的Unicode编码是6C49。

6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx10xxxxxx。

将6C49写成二进制是:0110110001001001, 用这个比特流依次代替模板中的x,得到:111001101011000110001001,即E6B189。

读者可以用记事本测试一下我们的编码是否正确。

UTF-16以16位为单元对UCS进行编码。

对于小于0×10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。

对于不小于0×10000的UCS码,定义了一个算法。

不过由于实际使用的UCS2,或者UCS4的BMP必然小于0×10000,所以就目前而言,可以认为UTF-16和UCS-2基本相同。

但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。

5、UTF的字节序和BOM UTF-8以字节为编码单元,没有字节序的问题。

UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。

例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。

如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”? Unicode规范中推荐的标记字节顺序的方法是BOM。

BOM不是“BillOf Material”的BOM表,而是ByteOrderMark。

BOM是一个有点小聪明的想法: 在UCS编码中有一个叫做”ZEROWIDTHNO-BREAK SPACE”的字符,它的编码是FEFF。

而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。

UCS规范建议我们在传输字节流前,先传输字符”ZERO WIDTHNO-BREAKSPACE”。

这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。

因此字符”ZERO WIDTHNO-BREAKSPACE”又被称作BOM。

UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。

字符”ZERO WIDTHNO-BREAKSPACE”的UTF-8编码是EFBB BF(读者可以用我们前面介绍的编码方法验证一下)。

所以如果接收者收到以EFBB BF开头的字节流,就知道这是UTF-8编码了。

Windows就是使用BOM来标记文本文件的编码方式的。

赞 收藏 评论 分享 举报 上一篇:mysql如果数据不存在,则插入新数据,否则更新 下一篇:資料庫的安全(備份/回存)(console) 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 (2) 最热 最新 1c03bb1178dd 1年前 真给力,就是有点长 回复 点赞 0b8ca3b9f6bb 1年前 挺好的,点赞! 回复 点赞 相关文章 utf8编码 UTF8是可变编码,数字英文都占1个字节,汉字占3个或4个字节。

mysql和MariaDB默认是utf8mb3,一般情况下没有问题,但若保存一些生僻字或颜文字(emoji)则会出错,这时需要utf8mb4,因这为些字符占4个字节数据库字段... 数据库 字段 16进制 utf8中文 #include#include#include#include  int main(void){    using namespace std;    auto LocUtf8=locale(locale(""),... #include ios 文本文件 知识 字符集utf8中文排序问题 数据库字符集:utf8排序规则:utf8_generay_ci表结构:mysql>descchr;+------------+---------------+------+-----+---------+-------+|Field   |Type    &nbsp... mysql 数据库 中文 mysqlutf8中文 #!/usr/bin/perluseDBI;useEncode;$user="root";$passwd="1234567";$dbh="192.168.32.232";my$table=;chomp$table;print"\$tableis$table\n";my$table=encode... sql mysql perl VB中UTF8转Unicode编码  Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef... VB 编码 Unicode 休闲 UTF8 tomcat设置编码utf8 1.       Java类:CharacterEncodingFilter importjavax.servlet.*;importjava.io.IOException;  publicclassCharacterEncodingFilterimplementsFilter{    privateStringencoding... tomcat java 数据库 ide ico 设置utf8编码问题 注意:乱码和request的具体实现类有关,现在已经查到的是RequestDispatcher.forward调用前使用的是org.apache.catalina.connector.RequestFacade类而RequestDispatcher.forward调用后使用的是org.apache.catalina.c... utf8 tomcat sed ico java utf8编码格式简介 UTF-8编码字符理论上可以最多到6个字节长,但目前全世界的所有文字和符号种类加起来也只要编到4个字节长就够了。

  UTF-8是以8位(即1个字节)为单元对原始码进行编码(注意一点:这里所讲的原始码都是... 编码 utf8 UTF8编码解码函数



請為這篇文章評分?