开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7758|回复: 48
收起左侧

[易语言纯源码] 文件_取文本编码

[复制链接]
发表于 2019-10-2 14:56:46 | 显示全部楼层 |阅读模式   浙江省台州市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 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,不喜欢】
后来我发现自带的编码转换支持库就可以做到判断文件的编码
  
子程序名返回值类型公开备 注
文件_取文本编码整数型 获取指定路径的txt文档的编码格式。(1:UTF-8,2:GBK),都不是返回0。
参数名类 型参考可空数组备 注
参_文件路径文本型
变量名类 型静态数组备 注
file字节集 
bool逻辑型 
file = 读入文件 (参_文件路径)
编码转换 (file, #编码_UTF_8, #编码_GBK, bool)
判断 (bool)
返回 (1)


编码转换 (file, #编码_GBK, #编码_UTF_8, bool)
判断 (bool)
返回 (2)
返回 (0)


i支持库列表   支持库注释   
iconv编码转换支持库


再后来我直接逆向了notepad.exe,直接分析出了记事本自己是怎么识别编码的,并且写出了算法。
QQ截图20191002144943.jpg

下面是源码:

  
子程序名返回值类型公开备 注
是否为UTF8逻辑型 如果为UTF8编码返回真,不是UTF8或空文本都返回假
参数名类 型参考可空数组备 注
参_文件内容字节集
变量名类 型静态数组备 注
文件长度整数型 
取出位置整数型 
循环取出内容字节集 
循环取出数值整数型 
返回值整数型 
次数整数型 
文件长度 = 取字节集长度 (参_文件内容)
次数 = 0
判断 (文件长度 ≤ 0)
返回 ()


取出位置 = 1
判断循环首 (取出位置 ≤ 文件长度)
循环取出内容 = 取字节集中间 (参_文件内容, 取出位置, 1)
循环取出数值 = 取字节集数据 (循环取出内容, 3, )
判断 (循环取出数值 > 127)
返回值 = 0


判断 (次数 = 0)
判断 (循环取出数值 < 128)



循环判断首 ()
循环取出数值 = 汇编左移 (循环取出数值, 1)
次数 = 次数 + 1
循环判断尾 (循环取出数值 > 127)
次数 = 次数 - 1
判断 (循环取出数值 = 0)
返回 ()






循环取出数值 = 位与 (循环取出数值, 192)  ' UTF8 3字节,后两位位与结果均是128
判断 (循环取出数值 = 128)
次数 = 次数 - 1


返回 ()


取出位置 = 取出位置 + 1
判断循环尾 ()
判断 (次数 ≠ 0)
返回 ()
判断 (返回值 = 0)
返回 ()


返回 ()

子程序名返回值类型公开备 注
汇编左移整数型 失败返回 -1
参数名类 型参考可空数组备 注
欲移动的整数整数型
欲移动的位数整数型
置入代码 ({ 139, 69, 8, 139, 77, 12, 210, 224, 201, 194, 2, 0 })
返回 (-1)
  
子程序名返回值类型公开备 注
文件_取文本编码整数型 获取指定路径的txt文档的编码格式。成功返回(1:UTF-8,2:Unicode;3:Unicode big endian;4:ANSI),默认返回 4。
参数名类 型参考可空数组备 注
参_文件路径文本型
变量名类 型静态数组备 注
文件内容字节集 
文件长度整数型 
lpiResult整数型 
文件内容 = 读入文件 (参_文件路径)
文件长度 = 取字节集长度 (文件内容)
判断 (取字节集中间 (文件内容, 1, 2){ 239, 187 })  ' UTF-8
判断 (文件长度 ≤ 2)

判断 (取字节集中间 (文件内容, 3, 1){ 191 })
返回 (1)



判断 (取字节集中间 (文件内容, 1, 2){ 255, 254 })  ' Unicode
返回 (2)
判断 (取字节集中间 (文件内容, 1, 2){ 254, 255 })  ' Unicode big endian
返回 (3)


lpiResult = -1
判断 (IsTextUnicode (文件内容, 文件长度, lpiResult))  ' Unicode
返回 (2)
判断 (是否为UTF8 (文件内容))  ' UTF-8
返回 (1)


返回 (4)  ' ANSI



Dll命令:
  
DLL命令名返回值类型公开备 注
IsTextUnicode逻辑型 IsTextUnicode 函数是确定一个缓冲区是否可能包含 Unicode 文本,包含Unicode 文本返回真。
DLL库文件名:
advapi32
在DLL库中对应命令名:
IsTextUnicode
参数名类 型传址数组备 注
lpv字节集指向要检查的输入缓冲区
iSize整数型由lpv指向的缓冲区大小,以字节为单位。
lpiResult整数型返回值,是Unicode 文本返回非零值,不是返回0




文件_取文本编码.e (7.88 KB, 下载次数: 94)

点评

已修改! 发现一个汇编翻译成易语言的错误!   浙江省台州市  发表于 2022-4-30 19:33
已修改!   浙江省台州市  发表于 2019-10-3 10:16

评分

参与人数 7好评 +5 精币 +14 收起 理由
kk4648 + 2 YYDS~!
DeHby + 1 + 2 支持开源~!感谢分享
我是个帅哥 + 1 + 2 新技能已get√
pwd + 1 + 2 支持开源~!感谢分享
kyo9766 + 2 感谢分享,很给力!~
汉族 + 1 + 3 支持开源~!感谢分享
峰生水起之林 + 1 + 1 支持开源~!感谢分享

查看全部评分


 楼主| 发表于 2022-4-30 19:32:22 | 显示全部楼层   浙江省台州市
haixin122 发表于 2021-4-30 23:49
这个文本他还是判断utf8

是我汇编翻译成易语言翻译错了,一分析才知道这个地方写错了 123.jpg

000.jpg

456.jpg

文件_取文本编码.e (904.37 KB, 下载次数: 108)
回复 支持 反对

使用道具 举报

结帖率:83% (15/18)

签到天数: 17 天

发表于 2023-12-23 17:28:47 | 显示全部楼层   湖南省长沙市
大神
回复 支持 反对

使用道具 举报

发表于 2023-10-26 22:08:38 | 显示全部楼层   福建省宁德市
11111111111111111111132威威
回复 支持 反对

使用道具 举报

发表于 2023-10-26 22:08:10 | 显示全部楼层   福建省宁德市
撒低级喀什角动量喀什角动量喀什
回复 支持 反对

使用道具 举报

发表于 2023-10-26 22:05:20 | 显示全部楼层   福建省宁德市
但是附件没有一个是这个最新的?
回复 支持 反对

使用道具 举报

结帖率:50% (4/8)

签到天数: 8 天

发表于 2023-5-30 00:32:20 | 显示全部楼层   福建省厦门市
看更新日志是: 补充内容 (2022-5-13 20:01)
但是附件没有一个是这个最新的?
回复 支持 反对

使用道具 举报

结帖率:93% (14/15)

签到天数: 2 天

发表于 2022-6-12 15:49:10 | 显示全部楼层   广东省深圳市
感谢分享了
回复 支持 反对

使用道具 举报

结帖率:40% (4/10)
发表于 2022-4-20 19:54:52 | 显示全部楼层   浙江省杭州市
回复 支持 反对

使用道具 举报

结帖率:40% (4/10)
发表于 2022-4-20 19:54:36 | 显示全部楼层   浙江省杭州市
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表