在Matlab中使用波斯语文件名或字符?

3

我想读取一个名称为波斯语(Farsi)的.csv文件的内容。Matlab似乎无法检测到这个文件。我使用以下代码:

a = csvread( <Persian filename> );

两件事。你使用的字符编码是什么?在命令窗口中键入 feature('DefaultCharacterSet')。有关更多信息,请参见此处。如果您从同一目录中键入 ls,那么文件名看起来像什么(它可能看起来有点像乱码,但您可以将其用作临时解决方法)? - horchler
使用的字符编码是“windows-1252”。由于我在Windows上运行,所以当运行dir命令时,文件名的位置会出现一些“?”。然后我更改了非Unicode程序的系统区域设置,现在看到的是一些生疏字符的乱码。 - elfar
你可以尝试在Matlab中更改字符集。首先注意默认设置:feature('DefaultCharacterSet')。然后可以尝试feature('DefaultCharacterSet','ISO-8859-1')feature('DefaultCharacterSet', 'UTF-8')(每次调用此函数时,它都会打印出先前的设置,而不是您要更改的设置)。除了将文件名更改为ASCII之外,这个问题可能最好由The MathWorks的人员回答。你可以尝试在用户论坛上提问或提交服务请求 - horchler
你可能想要那些“?”符号 - 这只是表示当前字体无法显示的字符。在这种情况下,Matlab命令窗口使用的字体可能不包括波斯语字符。更改系统区域设置可能会导致混淆; Matlab帮助指出,在Windows上,系统和用户区域设置需要相同。http://www.mathworks.com/help/matlab/matlab_env/setting-the-locale.html#brkh9v3-1。 - Andrew Janke
1个回答

1
我怀疑这是通过命令行和编辑器将字符转换为Matlab字符串值的问题。Matlab GUI是用Java实现的,因此在内部使用Unicode字符串。Matlab的char值是16位Unicode。但是,当您将M文件保存出来时,它可能会以您在Matlab或本地区域设置的字符编码输出。而且,您在Matlab GUI中使用的字体可能不支持文件名中的字符,因此即使字符串值在内部正确,您在命令提示符下也可能看到“?”符号或其他占位符。
NTFS文件系统以Unicode存储其文件名,因此在数据级别上的字符编码不应该影响访问文件本身。它只会影响文件内容的解释方式。
如果您只需要交互式执行一次,则可以通过使用uigetfile来绕过输入字符串的问题来交互式选择文件。
a = csvread( uigetfile() );

您还可以使用波斯语命名的文件的简单“8.3”文件名来获取它。在Windows命令提示符中,使用dir /x查看对应于长文件名的短8.3文件名。它们将是简单的ASCII字符,因此您在Matlab命令窗口或编辑器中键入它们时不会遇到任何问题。例如,我创建了一个名为تاده.txt的文件,它的8.3名称为6448~1.TXT
08/09/2013  01:10 AM    <DIR>                       .
08/09/2013  01:10 AM    <DIR>                       ..
08/09/2013  01:10 AM                 0 6448~1.TXT   ????.txt

作为对编程访问的测试,只需使用f = dir();而不是f = system('dir'))拉取目录中的所有文件名,查看所需文件名,然后将其传递给csvread,以便没有任何字符需要通过 GUI 文本区域。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接