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 字符的主要内容,如果未能解决你的问题,请参考以下文章