考一考你:如何计算UTF-8文本文件里有多少字符?
电脑技术
2510 人阅读
|
7 人回复
|
2022-02-01
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Starrry 于 2022-2-4 10:43 编辑
UTF-8字符最短1字节,最长4字节。
如何计算?如果排序不对,又如何检测出来呢?
|
|
|
|
|
本帖最后由 Starrry 于 2022-2-2 12:45 编辑
没问题,先简单叙述一下:
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
- cmp dl, 011110000b
- jae _4byte
- cmp dl, 011100000b
- jae _3byte
- cmp dl, 011000000b
- jae _2byte
- cmp dl, 001111111b
- jbe _1byte
-
- ;the others are continuation byte, don't count
复制代码
0x28+0xD=53字节,比在线的显示结果(52字节)多了一个字节,那是因为文本文件结尾多了一个0xA(换行符)。 |
|
|
|
|
ganbatte是什么意思,为什么下边有红色的波浪线? |
|
|
|
|
下面有红线是因为浏览器检查英文拼音时认为ganbatte是错别字(Spell checker).
Ganbatte是日语里“加油”的意思。
|
|
|
|
|
长知识了 |
|
|
|
|