Matlab中的Char(非ascii)

时间:2013-01-17 09:36:32

标签: matlab non-ascii-characters

我有三个字符(大于127),我需要用二进制文件写它 出于某种原因,MATLAB和PHP / Python倾向于写出不同的字符 对于Python,我有:

s = chr(143)+chr(136);
f = open('pythonOut.txt', 'wb');
f.write(s);
f.close();

对于MATLAB,我有:

s = strcat(char(143),char(136));
fid = fopen('matlabOut.txt');
fwrite(fid, s, 'char');
fclose(fid);

当我比较这两个文件时,它们是不同的。 (使用diff和/或cmp命令) 更多,当我做

disp(char(hex2dec('88'))) //MATLAB prints 
print chr(0x88) //PYTHON prints ˆ

两个输出都不同。我想让我的MATLAB代码与Python相同。 MATLAB代码有什么问题?

2 个答案:

答案 0 :(得分:4)

您正在尝试显示ASCII编号大于128的扩展ASCII字符符号.MATLAB内部不使用扩展ASCII,而是使用16位Unicode。

如果要编写与Python脚本中相同的值,请使用native2unicode获取所需的字符。例如,native2unicode(136)会返回^

答案 1 :(得分:4)

两个文件不同的事实似乎很明显; chr(134)明显不同于char(136):)

Matlab中,只有前127个字符对应(非扩展)ASCII;之后的任何事情都是Unicode16。

Python中,前255个字符对应(扩展)ASCII(对Unicode使用unichr())。

但是,unicode 0x88与extended ASCII 0x88相同(与其他大部分相同)。 Matlab没有正确显示它的原因是由于Matlab命令窗口默认情况下不能很好地处理Unicode,而Python(在终端中运行,或者我认为)通常可以做得更好。

尝试在Matlab的命令窗口中更改字体,或在终端中启动Matlab并打印0x88字符;它应该是一样的。

在任何情况下,字符输出到文件不应导致任何差异;它只是一个显示问题。