8

3文字(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);

これら2つのファイルを比較すると、違います。(diffおよび/またはcmpコマンドを使用)。
さらに、私がするとき

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

両方の出力が異なります。MATLABコードをPythonと同じにしたい。MATLABコードの何が問題になっていますか?

4

2 に答える 2

4

拡張ASCII文字、つまり128より大きいASCII番号のシンボルを表示しようとしています。MATLABは内部で拡張ASCIIを使用せず、代わりに16ビットUnicodeを使用します。

Pythonスクリプトと同じ値を記述したい場合は、を使用native2unicodeして必要な文字を取得します。たとえば、をnative2unicode(136)返します^

于 2013-01-17T10:05:32.473 に答える
4

2つのファイルが異なるという事実は明らかなようです。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 に答える