Matlab中的非ASCII字符

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代码有什么问题吗?


1
为了帮助读者,您能展示一下文件的二进制内容吗?另外,为什么您认为是MATLAB代码出了问题呢? - Eitan T
1
我认为这只是代码中的一个打字错误问题。143,134和143,136。当然它们是不同的!你让它们不同了。 - thang
@thang 谢谢,Thang!那是一个打字错误,我刚刚修正了它。 - user1983388
2个回答

4
你正在尝试显示扩展的 ASCII 字符,即 ASCII 编码大于 128 的符号。MATLAB 内部不使用扩展的 ASCII 编码,而是使用 16 位 Unicode 编码代替。
如果你想写入与 Python 脚本中相同的值,请使用 native2unicode 来获取所需的字符。例如,native2unicode(136) 返回 ^

4

很明显,这两个文件不同;chr(134) 明显与 char(136) 不同 :)

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

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

然而,unicode 0x88 与 extended ASCII 0x88 相同(大部分也是如此)。Matlab 不能正确显示它的原因是 Matlab 命令窗口默认情况下无法很好地处理Unicode,而 Python(在终端中运行或我猜测)通常做得更好。

尝试更改Matlab命令窗口中的字体,或在终端中启动Matlab并打印0x88字符;它应该是相同的。无论如何,将字符输出到文件中不应产生任何差异;这只是一个显示问题。

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