MATLAB 源文件中的 Unicode 字符

Posted

技术标签:

【中文标题】MATLAB 源文件中的 Unicode 字符【英文标题】:Unicode characters in MATLAB source files 【发布时间】:2011-02-13 13:59:37 【问题描述】:

我想在 MATLAB 源文件的 cmets 中使用 Unicode 字符。当我写文本时,这似乎有效;但是,如果我关闭文件并重新加载它,“不寻常”的字符就会变成问号。我猜 MATLAB 正在将文件保存为 ASCII。

有没有办法让 MATLAB 改用UTF-8?

【问题讨论】:

【参考方案1】:

根据http://www.mathworks.de/matlabcentral/newsreader/view_thread/238995

feature('DefaultCharacterSet', 'UTF8')

将编码更改为 UTF-8。您可以将上面的行放在您的 startup.m 文件中。

【讨论】:

请注意,上面评论中建议的slCharacterEncoding 是一个需要 Simulink 的函数。【参考方案2】:

How the MATLAB Process Uses Locale Settings 展示了如何为不同平台设置编码。使用

feature('DefaultCharacterSet')

您可以阅读有关此未记录函数here 的更多信息。另请参阅Matlab Central thread 了解其他选项。

【讨论】:

谢谢。您链接的页面说,在 Mac 上,Matlab 根据系统的语言设置决定编码,并忽略 LANG 环境变量。我尝试创建一个包含命令slCharacterEncoding('UTF-8')startup.m 文件,但这似乎没有帮助,除了让Matlab 在启动时挂在“初始化”阶段。无论如何,即使将 slCharacterEncoding 设置为“UTF-8”,脚本文件似乎仍然使用 ISO-8859-1 进行编码。还有其他想法吗? @LaC:不幸的是,我不知道如何在启动时设置编码。似乎还有改进的余地。 我接受这个答案,即使问题仍未解决,因为看起来没有任何解决方案。 slCharacterEncoding('UTF-8') 是一个 Simulink(因此有前缀 sl)函数。这就是它挂起系统的原因。【参考方案3】:

仅限 Mac OSX!

当我找到适合我的解决方案时,我想分享它。

Mathworks 建议 here 使用 slCharacterEncoding(encoding) 以根据需要更改编码,但对于 OSX,这并不能完全解决问题,因为接受的答案中的 feature('DefaultCharacterSet') 没有这样做。帮助我获得用于打开和保存 .m 文件的 UTF-8 编码集的是 MATLAB 答案上的以下链接: https://www.mathworks.com/matlabcentral/answers/12422-macosx-encoding-problem

Matlab 似乎忽略了slCharacterEncoding(encoding)feature('DefaultCharacterSet') 中设置的任何值,但使用了系统偏好设置-> 语言和区域中设置的区域。在检查我们的例子中选择了哪个区域之后,可以在隐藏配置文件中定义实际编码

 $matlabroot/bin/lcdata.xml

这个目录可以通过应用程序打开,然后右键单击 Matlab,选择 Show Package Contents as on screenshot(这里是德语)

例如对于德国默认 ISO-8859-1,可以通过更改文件 lcdata.xml 中的相应行来调整它:

 <locale name="de_DE" encoding="ISO-8859-1" xpg_name="de_DE.ISO8859-1">

到:

 <locale name="de_DE" encoding="UTF-8" xpg_name="de_DE.UTF-8">

如果选择的区域不在 lcdata.xml 文件中,这将不起作用。

希望这会有所帮助!

【讨论】:

【参考方案4】:

here 提供的解决方案在 R2018a 的 Windows 上为我工作。

万一链接不起作用:想法是使用文件matlabroot/bin/lcdata.xml为编码名称配置别名(可以在cmets的这个文件中找到一些解释):

<codeset>
  <encoding name="UTF-8">
   <encoding_alias name="windows-1252" />
  </encoding>
</codeset>

你可以使用自己的值来代替windows-1252,当前使用的编码可以通过运行feature('locale')获得。

虽然,如果您在帮助 cmets 中使用 Unicode 字符,帮助浏览器无法识别它们,以及控制台窗口输出。

【讨论】:

【参考方案5】:

对于 Mac OS 用户,Jendker 的解决方案真的很有帮助!!!首先非常感谢。

在这里回顾一下。

    通过在命令窗口中键入 getenv('LANG') 检查 Matlab 中的默认语言。我的返回en_US.ISO8859-1

    在Application目录中找到Matlab,显示其包内容。转到bin,以管理员身份打开lcdata.xml,找到对应的xpg_name,在我的情况下为en_US.ISO8859-1。将同一行中的encoding 更改为UTF-8。保存它。

    重新启动 Matlab,一切都完成了!

【讨论】:

以上是关于MATLAB 源文件中的 Unicode 字符的主要内容,如果未能解决你的问题,请参考以下文章

从C访问MATLAB的unicode字符串

javadoc和注释中的Unicode?

在源文件中使用 Unicode 并且缺少 unicode 符号

关于Unicode和多字符字集。

什么正则表达式仅在 C++ 源文件中查找字符串

Matlab 编译C/C++源文件并调用