递归火山软件开发平台
标题:
火山PC 怎么判断一个txt是否为UTF8?
[打印本页]
作者:
86339218
时间:
2023-10-15 14:40
标题:
火山PC 怎么判断一个txt是否为UTF8?
火山PC 怎么判断一个txt是否为UTF8?
[00000000]: 61 31 32 33 E6 88 91 E6 98 AF 55 54 46 2D 38 | a123......UTF-8
a123我是UTF-8
作者:
Xelloss0618
时间:
2023-10-15 15:52
UTF-8还是比较好判断的,要求效率的话,可以用第三方模块的功能,如:
PIV模块 simdUTF.验证UTF8 ()
火山模块 验证UTF8数据_ ()
如果不在乎效率,可以根据规则手写一个:
<火山程序 类型 = "通常" 版本 = 1 />
方法 是否UTF8 <公开 类型 = 逻辑型 折叠>
参数 数据 <类型 = 字节集类>
{
变量 文本长度 <类型 = 整数>
文本长度 = 数据.取字节集长度 ()
如果 (文本长度 == 0)
{
返回 (假)
}
如果 (数据.取字节集数据 (文本长度 - 1, 字节) == 0)
{
文本长度 = 文本长度 - 1 // 去掉结尾0字符的长度
}
变量 索引 <类型 = 整数>
变量 检验字节 <类型 = 字节>
循环 (0, 文本长度, 索引, 1)
{
检验字节 = 数据.取字节集数据 (索引, 字节)
如果 (检验字节 == 0)
{
返回 (假) // 非尾部有0字符
}
如果 (位右移 (检验字节, 7) == 0) // 1字节
{
到循环尾
}
否则 (检验字节 >= (字节)0xC0 && 检验字节 <= (字节)0xDF) // 2字节
{
如果 (索引 + 1 > 文本长度)
{
返回 (假) // 剩余长度不足
}
索引 = 索引 + 1
检验字节 = 数据.取字节集数据 (索引, 字节)
如果 (检验字节 < (字节)0x80 && 检验字节 > (字节)0xBF)
{
返回 (假) // 不在有效字节的范围内
}
}
否则 (检验字节 >= (字节)0xE0 && 检验字节 <= (字节)0xEF)
{
如果 (索引 + 2 > 文本长度)
{
返回 (假) // 剩余长度不足
}
计次循环 (2)
{
索引 = 索引 + 1
检验字节 = 数据.取字节集数据 (索引, 字节)
如果 (检验字节 < (字节)0x80 && 检验字节 > (字节)0xBF)
{
返回 (假) // 不在有效字节的范围内
}
}
}
否则 (检验字节 >= (字节)0xF0 && 检验字节 <= (字节)0xF7)
{
如果 (索引 + 4 > 文本长度)
{
返回 (假) // 剩余长度不足
}
计次循环 (3)
{
索引 = 索引 + 1
检验字节 = 数据.取字节集数据 (索引, 字节)
如果 (检验字节 < (字节)0x80 && 检验字节 > (字节)0xBF)
{
返回 (假) // 不在有效字节的范围内
}
}
}
否则
{
返回 (假)
}
}
返回 (真)
}
作者:
86339218
时间:
2023-10-15 16:09
Xelloss0618 发表于 2023-10-15 15:52
UTF-8还是比较好判断的,要求效率的话,可以用第三方模块的功能,如:
PIV模块 simdUTF.验证UTF8 ()
火山 ...
好的 我去看看模块
欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/)
Powered by Discuz! X3.4