我有三个字符(大于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代码有什么问题?
答案 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字符;它应该是一样的。
在任何情况下,字符输出到文件不应导致任何差异;它只是一个显示问题。