这个问题出现在,我的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的文件就能正常打开了。

Last modification:July 22nd, 2019 at 03:12 pm
If you think my article is useful to you, please feel free to appreciate