8

我有三个字符(大于 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 代码有什么问题?

4

2 回答 2

4

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

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

于 2013-01-17T10:05:32.473 回答
4

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

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

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

但是,unicode 0x88 与扩展的 ASCII 0x88 相同(与其他大多数一样)。Matlab 无法正确显示它的原因是,默认情况下,Matlab 命令窗口不能很好地处理 Unicode,而 Python(我认为在终端中运行)通常做得更好。

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

无论如何,输出到文件的字符不应该有任何差异;这只是一个显示问题。

于 2013-01-17T10:08:26.573 回答