本帖最后由 aiksie 于 2019-10-3 09:21 编辑
刚好用到需要取txt文件文本编码,本来是想先在论坛上找的,也找到了论坛发的相关的东西
https://bbs.125.la/forum.php?mod=viewthread&tid=14450853
http://e.125.la/fun-1156.html【完全只根据特征码】
https://bbs.125.la/forum.php?mod=viewthread&tid=14310538 【调用了未开源的非微软官方DLL,不喜欢】
后来我发现自带的编码转换支持库就可以做到判断文件的编码
变量名 | 类 型 | 静态 | 数组 | 备 注 | file | 字节集 | | | bool | 逻辑型 | | |
file = 读入文件 (参_文件路径 )编码转换 (file, #编码_UTF_8, #编码_GBK, bool ) 判断 (bool ) 返回 (1 ) 编码转换 (file, #编码_GBK, #编码_UTF_8, bool) 判断 (bool ) 返回 (2 ) 返回 (0 )
再后来我直接逆向了notepad.exe,直接分析出了记事本自己是怎么识别编码的,并且写出了算法。
下面是源码:
变量名 | 类 型 | 静态 | 数组 | 备 注 | 文件长度 | 整数型 | | | 取出位置 | 整数型 | | | 循环取出内容 | 字节集 | | | 循环取出数值 | 整数型 | | | 返回值 | 整数型 | | | 次数 | 整数型 | | |
文件长度 = 取字节集长度 (参_文件内容 )次数 = 0 判断 (文件长度 ≤ 0 ) 返回 (假) 取出位置 = 1 判断循环首 (取出位置 ≤ 文件长度 ) 循环取出内容 = 取字节集中间 (参_文件内容, 取出位置, 1 ) 循环取出数值 = 取字节集数据 (循环取出内容, 3, ) 判断 (循环取出数值 > 127 )  返回值 = 0      判断 (次数 = 0 ) 判断 (循环取出数值 < 128 )          循环判断首 ()  循环取出数值 = 汇编左移 (循环取出数值, 1 )  次数 = 次数 + 1   循环判断尾 (循环取出数值 > 127 )  次数 = 次数 - 1   判断 (循环取出数值 = 0 )  返回 (假)               循环取出数值 = 位与 (循环取出数值, 192 )  判断 (循环取出数值 = 128 )  次数 = 次数 - 1      返回 (假)   取出位置 = 取出位置 + 1 判断循环尾 () 判断 (次数 ≠ 0 ) 返回 (假) 判断 (返回值 = 0 ) 返回 (真) 返回 (假) |
汇编左移 | 整数型 | | |
欲移动的整数 | 整数型 | | | | 欲移动的位数 | 整数型 | | | | 置入代码 ({ 139, 69, 8, 139, 77, 12, 210, 224, 201, 194, 2, 0 })返回 (-1 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | 文件内容 | 字节集 | | | 文件长度 | 整数型 | | | lpiResult | 整数型 | | |
文件内容 = 读入文件 (参_文件路径 )文件长度 = 取字节集长度 (文件内容 ) 判断 (取字节集中间 (文件内容, 1, 2 ) = { 239, 187 })  判断 (文件长度 ≤ 2 )   判断 (取字节集中间 (文件内容, 3, 1 ) = { 191 }) 返回 (1 )      判断 (取字节集中间 (文件内容, 1, 2 ) = { 255, 254 }) 返回 (2 ) 判断 (取字节集中间 (文件内容, 1, 2 ) = { 254, 255 }) 返回 (3 ) lpiResult = -1 判断 (IsTextUnicode (文件内容, 文件长度, lpiResult )) 返回 (2 ) 判断 (是否为UTF8 (文件内容 )) 返回 (1 ) 返回 (4 )
Dll命令:
文件_取文本编码.e
(7.88 KB, 下载次数: 107)
|