MATLAB编码方式-解决中文乱码问题 – Eddy’s World

这个问题出现在,我的m文件在英文系统的linux版本matlab中输入了中文,而将该文件在英文系统的mac版本matlab中打开,中文部分变成了乱码。那么该如何解决呢?

1.查看本地编码格式

首先在任意系统语言和任意版本的matlab中键入以下命令以查看本地编码格式:

>> feature('locale')
# 我的英文系统的Linux版本中显示如下
ans =

  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: 'UTF-8'
         jvmEncoding: 'UTF-8'
              status: 'MathWorks locale management system initialized.'
             warning: ''

#我的英文系统的Mac版本中显示如下
ans = 

  struct with fields:

               ctype: 'en_US.ISO-8859-1'
             collate: 'en_US.ISO-8859-1'
                time: 'en_US.ISO-8859-1'
             numeric: 'en_US_POSIX.ISO-8859-1'
            monetary: 'en_US.ISO-8859-1'
            messages: 'en_US.ISO-8859-1'
            encoding: 'ISO-8859-1'
    terminalEncoding: 'UTF-8'
         jvmEncoding: 'ISO-8859-1'
              status: 'MathWorks locale management system initialized.'
             warning: ''

2. 集中编码格式简介

matlab 中文环境下默认是 gb2312(gbk) 编码。这种编码方式并不通用,如果需要和其他语言交互或者在其他编辑器打开时都会遇到一些麻烦。

matlab 英文环境下默认是 ISO-8859-1 编码。这种编码方式使用单字节编码,可编码256个字符,显然不包含中文。

建议无论什么编程语言所有程序使用utf-8 格式进行编码。

3. 如何转换一个m文件的编码

这个方法适用于所有程序语言文件,操作也很简单。

使用Visual Studio Code软件来打开该文件,点击右下角的编码格式。
它将弹出2个选项,“通过编码重新打开”,“通过编码保存”。
Screen Shot 2019-07-15 at 15.18.03.png
当出现乱码时,首先使用它原本的编码打开,如果不知道原本的编码可以使用上面三种进行猜测。
重新打开并显示正常后,再点击通过编码保存,选择新的编码格式。

4. 改变MATLAB本地编码格式

在MATLAB安装目录bin下找到lcdata_utf8.xml文件打开,
删除

        <encoding name="ISO-8859-1" compat="windows-1252">
            <encoding_alias name="ISO8859-1"/>
            <encoding_alias name="ISO88591"/>
        </encoding>
        <encoding name="GB18030"/>
        <encoding name="GB2312" compat="GBK">
            <encoding_alias name="EUC-CN"/>
            <encoding_alias name="euccn"/>
        </encoding>

并将

        <encoding name="UTF-8">  
            <encoding_alias name="utf8"/>
            <encoding_alias name="GBK"/>     
        </encoding>  

改为

        <encoding name="UTF-8">  
            <encoding_alias name="utf8"/>
            <encoding_alias name="GBK"/>
            <encoding_alias name="ISO-8859-1"/>
            <encoding_alias name="GB2312"/>     
            <encoding_alias name="GB18030"/>               
        </encoding>  

最后将lcdata_utf8.xml文件重命名为lcdata.xml后重启MATLAB
若lcdata.xml已存在,则删除原lcdata.xml文件。
重启后,

>> feature('locale')

ans = 

  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: 'UTF-8'
         jvmEncoding: 'UTF-8'
              status: 'MathWorks locale management system initialized.'
             warning: ''

此时,原UTF-8的文件就能正常打开了。

Ten articles before and after

使用Zotero进行从未有过的畅快学术体验 – Eddy’s World

手把手教你系列之一:我的TAMU留学准备 – Eddy’s World

DDNS搭建与扶墙回国 – Eddy’s World

Telegram:新手指南、使用教程及频道推荐 – Telgram.cn

CESM tx0.1v3 regrid to uniform 0.1×0.1 grid – Eddy’s World

ARGO数据使用笔记 – Eddy’s World

MATLAB工具箱推荐(2)mexcdf工具箱 – Eddy’s World

百度网盘高速下载【唯一有效方案】 – Eddy’s World

ROMS:从入门到精通-2.Lake Signell Case – Eddy’s World

在Mac上安装Ferret – Eddy’s World