考一考你:如何计算UTF-8文本文件里有多少字符?
本帖最后由 Starrry 于 2022-2-4 10:43 编辑UTF-8字符最短1字节,最长4字节。
如何计算?如果排序不对,又如何检测出来呢?
不太懂啊,楼主揭晓答案吧 本帖最后由 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
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是什么意思,为什么下边有红色的波浪线? 蓝莓糖 发表于 2022-2-2 11:56
ganbatte是什么意思,为什么下边有红色的波浪线?
下面有红线是因为浏览器检查英文拼音时认为ganbatte是错别字(Spell checker).
Ganbatte是日语里“加油”的意思。
Starrry 发表于 2022-2-2 11:58
下面有红线是因为浏览器检查英文拼音时认为ganbatte是错别字(Spell checker).
Ganbatte是日语里“加油” ...
原来是这样,日语还能用英文字母表达 长知识了{:10_453:} simonzhd 发表于 2022-2-2 22:58
长知识了
替你开心,是应该普及UTF-8的知识的。
页:
[1]