utf8中文编码范围

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、big endian和little endianbig endian和little endian是CPU处理多字节数的不同方式。例如“汉”字的Unicode编码是6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian。“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。 4、UTF编码UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:UCS-2编码(16进制) UTF-8 字节流(二进制)0000 - 007F 0xxxxxxx0080 - 07FF 110xxxxx 10xxxxxx0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx 例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。读者可以用记事本测试一下我们的编码是否正确。UTF-16以16位为单元对UCS进行编码。对于小于0x10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。对于不小于0x10000的UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF-16和UCS-2基本相同。但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。5、UTF的字节序和BOMUTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF(读者可以用我们前面介绍的编码方法验证一下)。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。Windows就是使用BOM来标记文本文件的编码方式的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: UTF-8汉字编码对照表(Universal Character Set Transformation Format - 8-bit)是一种用于在计算机存储和处理文本的编码方式,它是Unicode的一种变体。UTF-8编码支持世界上几乎所有的字符,包括中文字符。 UTF-8使用不同长度的字节序列来表示不同的字符。对于英文字母和数字等ASCII字符,UTF-8编码使用一个字节表示,与ASCII编码保持兼容;对于汉字等非ASCII字符,UTF-8编码使用两个或更多字节表示。 UTF-8编码汉字范围是U+4E00至U+9FA5,共20902个字符。这个范围内包括了现代汉字、繁体汉字以及一些常用的生僻字。通过UTF-8编码,可以将这些汉字表示成一个或多个字节序列。 UTF-8汉字编码对照表列出了从U+4E00到U+9FA5的所有汉字及其对应的UTF-8编码。每个汉字在UTF-8编码中占用的字节数可能不同,但都能表示准确的字符。例如,UTF-8编码汉字“中”对应的编码是E4 B8 AD。 使用UTF-8编码方式有很多好处。首先,它能够容纳世界上各个语言的字符,不再受到字符集的限制。其次,UTF-8编码是可变长度的,对于英文等ASCII字符,使用一个字节表示,比传统的编码方式更节省空间。最后,UTF-8编码是逐渐取代其它编码方式成为国际通用编码,减少了字符转换的麻烦。 总之,UTF-8汉字编码对照表包含了所有汉字字符及其对应的编码,在实际应用中使用UTF-8编码方式能够更好地支持汉字和其他语言的字符表示,并促进跨语言的信息交流和数据处理。 ### 回答2: UTF-8汉字编码对照表是一种用于将汉字字符映射到计算机系统中的编码系统。UTF-8是一种可变长度的编码方式,它可以将Unicode中的所有字符以字节形式表示。UTF-8编码是一种兼容ASCII编码的方式,即使用一个字节表示ASCII字符,而使用多个字节表示非ASCII字符,这使得在使用UTF-8编码的系统中,可以同时处理ASCII字符和汉字字符。 汉字在Unicode中的编码范围是0x4E00到0x9FFF,这个范围内的每一个汉字都有一个对应的Unicode码点。在UTF-8中,每一个Unicode码点通过一系列的字节表示。对于汉字而言,它的编码范围超出了ASCII编码范围,因此需要使用多个字节来表示,具体的字节个数取决于汉字编码范围。 UTF-8汉字编码对照表列出了每一个汉字及其对应的UTF-8编码的字节序列。比如,汉字“中”对应的Unicode码点是0x4E2D,而在UTF-8中它的编码字节序列是0xE4B8AD。这个字节序列包含了三个字节,每个字节的高位为1,后面的7位是表示该字节所包含的数据。通过这个字节序列,计算机系统可以正确地识别和处理这个汉字字符。 对照表可以帮助开发人员在处理汉字字符时正确地转换和解码UTF-8编码。在编程和网页设计中,使用UTF-8编码对照表可以帮助开发人员准确地处理和显示汉字字符,确保文字内容的准确性和兼容性。 ### 回答3: UTF-8是一种用于存储和传输Unicode字符的可变长度编码方案。UTF-8编码使用1到4个字节来表示一个Unicode字符,其中汉字占用3个字节。 UTF-8汉字编码对照表是一个包含Unicode字符与对应的UTF-8编码表示之间关系的表格。该表格列出了Unicode编码范围内的所有字符及其对应的UTF-8编码。 UTF-8编码是一种多字节编码方案,使用不同长度的字节序列来表示不同的字符。在UTF-8编码中,ASCII字符使用1个字节表示,而Unicode范围内的其他字符则使用多个字节表示。 UTF-8汉字编码对照表通过列出Unicode编码范围内的汉字字符及其对应的UTF-8编码,方便人们在实际应用中进行编码转换和字符处理。 在UTF-8汉字编码对照表中,可以找到汉字的Unicode编码,例如"你"字的Unicode编码为U+4F60。然后可以根据UTF-8编码规则,将Unicode编码转换为对应的UTF-8字节序列,例如"你"字的UTF-8编码为E4BDA0。 通过UTF-8汉字编码对照表,我们可以方便地进行汉字编码转换和字符处理。无论是在编程中处理字符串,还是在网络传输中使用UTF-8编码进行数据传输,都可以依靠UTF-8汉字编码对照表来确保汉字的正确表示和处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值