关于Windows环境下记事本编辑引发的编码问题

  有时候,我们会发现,明明在Linux环境下调试运行正常的UTF-8格式的脚本,偶尔会在Windows上存放一段时间后变的无法正常使用;后来排查往往是文件编码的问题(写脚本写的多的都知道,脚本运行环境最好设置为UTF-8,可以避免引入中文后出现许多奇奇怪怪的问题;因为脚本中的一些注释我们习惯性写成汉字,所以会引入中文)。这其中,罪魁祸首就是Windows自带的记事本。

  做个简单的测试,在Windows环境下新建一个文本文件test.txt后,不要用记事本打开,使用第三方的文本编辑器如Notepad++,会发现此时文件编码是普通的UTF-8,在Notepad++内进行任意操作后保存,再次打开编码仍然是正常的UTF-8,目前为止一切都很正常。

  也就是说,不使用记事本进行操作的话,什么事都不会有

  然后,用记事本打开test.txt,编辑后保存,会发现:

  当记事本在保存的时候,如果文本之前是不含汉字的UTF-8的话,插入新的汉字后保存,此时的txt文件编码变成了ANSI。(ANSI编码是一种对ASCII码的拓展,除美国外的其他国家增加了自己的编码字符进去。)不插入汉字进行其他操作后保存的话还是UTF-8

  当记事本在保存的时候,如果文本之前是已经包含汉字的UTF-8的话,不管进行何种操作,只要执行了保存,此时我们的txt文件编码变成了UTF-8-BOM。(BOM标记是微软系统自己的习惯特性,就跟微软喜欢给获取IP失败的网卡上169.254的IP一个套路,都是微软特殊习惯,哈)这个情况基本上一定会出现,因为之前放在工作环境中的UTF-8脚本为了便于其他同事阅读都会写大量中文注解。然而UTF-8-BOM编码的脚本在Linux环境下是无法正常运行的,不过,反过来运行PowerShell脚本的时候,只有BOM编码才能保证汉字的正常输出,这个需要注意

  所以,我们知道了,从生产环境上拉下来的脚本,最好养成使用专业的文本编辑器去阅读、编辑的习惯,记事本在条件不够的情况下可以临时用来打开阅读,但一定避免使用记事本执行保存。


发表评论

评论列表,共 0 条评论

    暂无评论