2013-01-17 9 views
8

私は3文字(127より大きい)を持っており、バイナリファイルに書き込む必要があります。
何らかの理由で、MATLABとPHP/Pythonが異なる文字を書く傾向があります。 Python用
は、私が持っている:MATLAB用MatlabのChar(非アスキー)

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

を、私が持っている:私はこれらの2つのファイルを比較すると

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コードだと仮定しますか? –

+1

私はそれがコード内のタイプミスの問題だと思います。 143,134および143,136。もちろん彼らは違います!あなたはそれらを違うものにしました。 – thang

+0

@thangありがとう、thang!それはタイプミスで、私はそれを修正しました。 – user1983388

答えて

4

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

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

4

2つのファイルが異なるということは明らかです。 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文字を印刷してみてください。それは同じでなければなりません。

いずれの場合でも、ファイルへの文字の出力では違いはありません。それはちょうどディスプレイ問題です。

関連する問題