考一考你:如何计算UTF-8文本文件里有多少字符?

电脑技术 电脑技术 1922 人阅读 | 7 人回复 | 2022-02-01

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Starrry 于 2022-2-4 10:43 编辑

UTF-8字符最短1字节,最长4字节。

如何计算?如果排序不对,又如何检测出来呢?

scrn_utf8_1to4.png


scrn_utf8_1to3.png


scrn_ascii.png

utf8count_v0.02.zip

4.89 KB, 下载次数: 2

回答|共 7 个

蓝莓糖 发表于 2022-2-2 11:23:33| 字数 12 | 显示全部楼层

不太懂啊,楼主揭晓答案吧

Starrry 发表于 2022-2-2 11:53:12| 字数 629 | 显示全部楼层

本帖最后由 Starrry 于 2022-2-2 12:45 编辑
蓝莓糖 发表于 2022-2-2 11:23
不太懂啊,楼主揭晓答案吧

没问题,先简单叙述一下:

4字节的UTF-8都是以1111 xxxx 开始的
3字节的UTF-8是以1110 xxxx 开始的
2字节的UTF-8是以1100 xxxx 开始的
1字节的UTF-8(也就是ASCII)是以0开始的,如01111 1111.
只剩下10xx xxxx,也就是Continuation Byte,是那些2~4字节后面的组成成分。

这么一来,这个方程式就一目了然,如:

if code>=011110000b then
        goto _4byte
else if code>=011100000b then
        goto _3byte
else if code>=011000000b then
        goto _2byte
else if code<=01111111b then
        goto _1byte
else
         // it is continuation byte, ignore it

  1.      cmp     dl, 011110000b
  2.      jae     _4byte
  3.      cmp    dl, 011100000b
  4.      jae      _3byte
  5.      cmp    dl, 011000000b
  6.      jae      _2byte
  7.      cmp     dl, 001111111b
  8.      jbe     _1byte
  9.      
  10.    ;the others are continuation byte, don't count
复制代码


1.png


2.png



0x28+0xD=53字节,比在线的显示结果(52字节)多了一个字节,那是因为文本文件结尾多了一个0xA(换行符)。

蓝莓糖 发表于 2022-2-2 11:56:22| 字数 27 | 显示全部楼层

ganbatte是什么意思,为什么下边有红色的波浪线?

Starrry 发表于 2022-2-2 11:58:16| 字数 113 | 显示全部楼层

蓝莓糖 发表于 2022-2-2 11:56
ganbatte是什么意思,为什么下边有红色的波浪线?

下面有红线是因为浏览器检查英文拼音时认为ganbatte是错别字(Spell checker).

Ganbatte是日语里“加油”的意思。

蓝莓糖 发表于 2022-2-2 12:00:22| 字数 106 | 显示全部楼层

Starrry 发表于 2022-2-2 11:58
下面有红线是因为浏览器检查英文拼音时认为ganbatte是错别字(Spell checker).

Ganbatte是日语里“加油” ...

原来是这样,日语还能用英文字母表达

simonzhd 发表于 2022-2-2 22:58:54| 字数 4 来自手机 | 显示全部楼层

长知识了

Starrry 发表于 2022-2-2 23:00:16| 字数 48 | 显示全部楼层


替你开心,是应该普及UTF-8的知识的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐