判断一个字节序列是否为UTF-8格式,需要理解UTF-8编码的规则。UTF-8是一种可变长度的编码方式,它使用1到4个字节来表示一个Unicode字符。根据UTF-8的编码规则,一个字节序列是有效的UTF-8格式,当且仅当它满足以下条件: - 单字节的字符必须具有0xxxxxxx的模式(即最高位为0)。
- 多字节的字符序列的第一个字节以1开头,后续字节以10开头。
- 具体来说,对于多字节字符:
- 两个字节序列的第一个字节以110xxxxx开头,第二个字节以10xxxxxx开头。
- 三个字节序列的第一个字节以1110xxxx开头,第二个和第三个字节以10xxxxxx开头。
- 四个字节序列的第一个字节以11110xxx开头,第二个、第三个和第四个字节以10xxxxxx开头。
用汇编写了个,测试了下还不错,别人的测试不通过的情况是:前面是UTF8 后面不是 的情况也是返回真
|
| 字节集_是否为UFT8 | 逻辑型 | | |
| 数据 | 字节集 | | | | 长度 | 整数型 | | | | 置入代码 ({ 199, 69, 248, 0, 0, 0, 0, 199, 69, 236, 0, 0, 0, 0, 235, 9, 139, 69, 236, 131, 192, 1, 137, 69, 236, 139, 69, 236, 59, 69, 12, 15, 131, 180, 0, 0, 0, 139, 69, 8, 139, 0, 131, 192, 8, 3, 69, 236, 138, 8, 136, 77, 227, 131, 125, 248, 0, 117, 113, 15, 182, 69, 227, 131, 248, 127, 127, 2, 235, 202, 15, 182, 69, 227, 61, 194, 0, 0, 0, 124, 20, 15, 182, 69, 227, 61, 223, 0, 0, 0, 127, 9, 199, 69, 248, 1, 0, 0, 0, 235, 171, 15, 182, 69, 227, 61, 224, 0, 0, 0, 124, 20, 15, 182, 69, 227, 61, 239, 0, 0, 0, 127, 9, 199, 69, 248, 2, 0, 0, 0, 235, 140, 15, 182, 69, 227, 61, 245, 0, 0, 0, 124, 23, 15, 182, 69, 227, 61, 244, 0, 0, 0, 127, 12, 199, 69, 248, 3, 0, 0, 0, 233, 106, 255, 255, 255, 48, 192, 235, 81, 235, 40, 15, 182, 69, 227, 61, 128, 0, 0, 0, 124, 25, 15, 182, 69, 227, 61, 191, 0, 0, 0, 127, 14, 139, 69, 248, 131, 232, 1, 137, 69, 248, 233, 64, 255, 255, 255, 48, 192, 235, 39, 233, 55, 255, 255, 255, 131, 125, 248, 0, 117, 12, 199, 133, 24, 255, 255, 255, 1, 0, 0, 0, 235, 10, 199, 133, 24, 255, 255, 255, 0, 0, 0, 0, 138, 133, 24, 255, 255, 255, 201, 194, 8, 0 })返回 (假)
补充内容 (2024-7-9 21:11):
你给的那几个Unicode只有“我”是符合utf8的,所以这种情况很难判断 ,比如“你我她飞”都是 |