Matlab 中文编码问题
内置编辑器中文内容保存后再打开变为乱码/问号(?) 画图时中文标题显示为乱码/问号(?)
系统环境
- Matlab R2019b
- Windows 10
- 系统语言是英文
现象
原本写的时候是这样:
保存一下关闭
Matlab
再打开,唔!竟然变成了这样:或是这样:
使用plot函数画图,结果是这样:
或是这样:
在
Matlab
命令窗口中输入命令feature('locale')
,输出是这样:struct with fields: ctype: 'en_US.windows-1252' collate: 'en_US.windows-1252' time: 'en_US.windows-1252' numeric: 'en_US_POSIX.windows-1252' monetary: 'en_US.windows-1252' messages: 'en_US.windows-1252' encoding: 'windows-1252' terminalEncoding: 'GBK' jvmEncoding: 'Cp1252' status: 'MathWorks locale management system initialized.' warning: 'System locale setting, zh_CN, is different from user locale setting, en_US.'
注意
windows-1252
编码。
注意
如果你在Matlab
内置编辑器中无法输入中文,或显示为方框,那应该是设置的字体不支持中文,与本文内容无关。
解决办法
找到你的
Matlab
的安装目录,可以通过右击Matlab
图标,选择“打开文件夹位置”查看。在我这里是C:\Program Files\MATLAB\R2019b\bin
。此目录下应该有一个
lcdata.xml
文件,和一个lcdata_utf8.xml
文件。其中
lcdata.xml
是仅包含注释的空文件。 若只有lcdata.xml
文件,应该是较早的Matlab
版本,解决方法应该类似。备份一下
lcdata.xml
文件,如将其重命名为lcdata.old.xml
。复制lcdata_utf8.xml
并将其重命名为lcdata.xml
。然后打开新的lcdata.xml
进行修改。此时
lcdata.xml
大概是这个样子:找到这个:
<encoding name="windows-1252" jvm_encoding="Cp1252"> <encoding_alias name="1252"/> </encoding>
将其删除。再找到这个:
<encoding name="UTF-8"> <encoding_alias name="utf8"/> </encoding>
将其改成
<encoding name="UTF-8"> <encoding_alias name="utf8"/> <encoding_alias name="windows-1252"/> <encoding_alias name="1252"/> </encoding>
重启
Matlab
,问题是不是都解决了呢?注意此时feature('locale')
命令的输出:struct with fields: ctype: 'en_US.UTF-8' collate: 'en_US.UTF-8' time: 'en_US.UTF-8' numeric: 'en_US_POSIX.UTF-8' monetary: 'en_US.UTF-8' messages: 'en_US.UTF-8' encoding: 'UTF-8' terminalEncoding: 'GBK' jvmEncoding: 'UTF-8' status: 'MathWorks locale management system initialized.' warning: 'System locale setting, zh_CN, is different from user locale setting, en_US.'
原理
其实就是将windows-1252
编码(不包含中文字符编码)原本的信息删除,并让Matlab
误以为windows-1252
是UTF-8
(包含中文字符编码)的一个别称罢了!
延申
若是原先feature('locale')
命令的结果中不是windows-1252
编码,而是GBK
或其他编码,可以类似处理。
参考资料
英文操作系统,MATLAB编辑器保存与显示中文乱码的两种情况和解决方法 - CSDN