autoitv3 输出的utf8 文件不带"BOM",导致中文路径输出乱码,做成的脚本供给其它程序时就会出错了。powershell脚本没有显示出错,但是不能正确输出结果。排查半天才发现这个问题。
使用notepad另存为,在编码的位置增加BOM保存,即可正常运行。
检查 编辑器的配置文件SciTEGlobal.properties,相关字段如下:
#~ Enhance function of auto checking utf8: providing two methods
# detect utf8 and add BOM automatically Credits to SciTE-RU;自动检查并添加
utf8.auto.check=1
# detect utf8 and do not add BOM (不添加)
#~ utf8.auto.check=2
# detect ascii high characters and if none found set default encoding to UTF8 and add BOM(检测 ASCII 高位字符,如果没有发现,则将默认编码设置为 UTF-8 并添加 BOM。)
utf8.auto.check=3
# detect ascii high characters and if none found set default encoding to UTF8 and do not add BOM
#utf8.auto.check=4
# Japanese input code page 932 and ShiftJIS character set 128
#code.page=932
#character.set=128
# Unicode
#~ code.page=65001
code.page=936
#character.set=204
#command.discover.properties=python /home/user/FileDetect.py "$(FilePath)"
# Required for Unicode to work on GTK+:
#LC_CTYPE=en_US.UTF-8
先暂时这样,研究透后再发
解决办法:
以为修改这里可以解决问题,其实是可以使用fileopen()函数解决,但是原版的fileopen遗漏了说明后面参数可以按位或,所以可以进行多个读写属性的添加。示例:
fileopen($path,mode),实际上mode 可写的是2,以utf8 带BOM保存的mode值是128,所有这些值帮助里面查找,也可以在fileconstants.au3里面查找,里面已经创建了一些全局变量供文件操作的一些函数使用。关键是如果要写出来的文件按照utf带BOM保存,除了可写2外,还要加上128,怎么实现,使用bitor(2,128)。这个问题困绕我很久,查看_filewrite()用户函数,才发现原来fileopen()函数还有fileopen($path,bitor($fo_write,$fo_utf8)这个写法。
但是研究上面的文件也有收获 code.page使用代码页,character.set 指定的显示语种,128显示日语,中文是132,这个还需要仔细研究一下基础知识,慢慢再积累吧!
评论0
暂时没有评论