【学习笔记】一个关于utf8编码转换的问题

博客讨论了在网上找到的UTF-8编码转换工具存在的问题,大部分工具将汉字转换为Unicode而非UTF-8编码。正确的UTF-8编码对于三个字节的汉字应该是三个字节表示。文中详细介绍了UTF-8编码的规则,并提供了正确的转换示例。内容涵盖了字符编码的基础知识,包括字符数范围、字节序列格式以及编码过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【学习笔记】一个关于utf8编码转换的问题

在验证某些东西时,需要使用到中文对应的utf8编码,就到网上搜索了utf8编码转换的一些在线工具,发现了些问题。

百度第一页所有的utf8编码在线转换转换出来的结果都不是utf8编码,都是Unicode编码。直到我翻到第二页才找到一个转换正确的工具。

例如我使用汉字转换出来的结果通通都是597D,如下图所示:

1
2
3
4
5
6

转换出来的结果都是Unicode编码。

正确的转换结果如下:

7

我们常用的汉字Unicode编码范围为4E00-9FA5,对应utf8编码一定是3个字节,所以转换出两个字符肯定是错的。

下面是关于UTF-8编码的简介。

UTF-8简介

UTF-8 由 Unicode Standard [UNICODE]定义。

在 UTF-8 中,在 U+0000…U+10FFFF 范围(UTF-16 可访问范围)的字符使用 1 到 4 个字节序列进行编码。

如果只有一个字节的序列,将高位设置为 0,其余 7 位用于对字符编号进行编码。
在 n 个字节的序列中,n>1,第一个字节的 n 个高位设置为 1,然后有一个位设置为 0。
该字节的剩余位包含字符编号中的位进行编码。后面的字节都将高位设置为 1,后面的位设置为 0,每个字节中留出 6 位来包含要编码的字符中的位。

下表总结了这些不同字节类型的格式。字母 x 表示可用于对字符编号进行编码的位。


   Char. number range  |        UTF-8 octet sequence
      (hexadecimal)    |              (binary)
   --------------------+---------------------------------------------
   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 的过程如下:

  1. 从上表的字符数和第一列确定所需的字节数。
    重要的是要注意表中的行是互斥的,即只有一种有效的方法来编码给定的字符。

  2. 根据表的第二列准备字节的高位。

  3. 从字符编号的位中填入标记为 x 的位,以二进制表示。
    首先将字符号的最低位放在序列的最后一个字节的最低位,然后将字符号的下一个高位位放在该字节的下一个高位,以此类推。
    当最后一个字节的 x 位被填满时,移动到倒数第二个字节,然后到前一个,依此类推,直到所有 x 位都被填满。

参考资料

UTF-8


https://blog.youkuaiyun.com/u012028275/article/details/122654388

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值