MATLAB与Git的恩怨(谈编码格式)
[原创,禁止转载。仅为个人理解,不正确之处欢迎讨论。]
从编码格式说起
Windows下MATLAB的.m文件默认采用GBK格式编码保存,这可以通过MATLAB里运行feature('locale')
代码查看。
例如运行结果如下:
GBK可以理解为中国特色社会主义编码,即为中国而量身打造的,那么它的通用性就不如UTF-8好。例如很多软件可能支持UTF-8,不支持GBK。这时用其他软件(例如Git管理工具GitKraken,代码编写工具VSCode)查看.m文件时就会出现中文乱码的问题。
例如这样:
GitKraken中乱码问题
解决方案
既然GBK不如UTF-8通用性好,那么自然而然我们就想到了让MATLAB以UTF-8编码格式保存和打开文件。
操作如下:
-
找到MATLAB安装目录(例如我的
D:\Program Files\MATLAB\R2019a\bin
)下的lcdata.xml
文件 -
若
lcdata.xml
文件内都是注释(MATLAB 2016b即以上),则删除该文件。然后将该目录下的lcdata_utf8.xml
文件改名为lcdata.xml
。 -
打开
image.pnglcdata.xml
文件,该文件整体分为两部分:
-
在
image.pnglcdata.xml
文件的Codeset entry
部分找到以<encoding name="GB18030"/>
、<encoding name="GB2312" compat="GBK">
、<encoding name="GBK">
开头的部分并删除(或注释掉),例如为
-
找到以
image.png<encoding name="UTF-8">
开头的部分,在其中加入<encoding_alias name="GBK"/>
以及GB2312
,GB18030
,EUC-CN
,euccn
,936
等别名,例如:
-
重启MATLAB,新建的文件即以UTF-8保存。
原理分析
MATLAB在中文Windows系统上默认采用GBK编码,那么我们在上面的配置文件里把名字叫GBK的部分从Codeset entry
里的删了,并且在<encoding name="UTF-8">
里加入<encoding_alias name="GBK"/>
,意思是UTF-8的别名也叫GBK了。那么MATLAB在找GBK的时候,实际上找的是UTF-8,这样就按照UTF-8保存和打开文件了。
另外比较蛋疼的是,这么改完之后,MATLAB建立的文件用其他软件打开没有问题了,但是,MATLAB打开它以前用GBK格式保存的.m文件时,乱码了,码了,了。这个问题的解决方法是可以用文本文档、notepad++等软件打开,然后全选复制到MATLAB中(新建一个.m文件),再保存覆盖之前的老文件即可。或者用notepad++可以直接将GBK、GB2312等格式转为UTF-8格式。
关于机器学习、算法、Python、计算机等更多内容,请关注微信公众号: