2013-01-17 5 views
8

Ich habe drei Zeichen (größer als 127) und ich muss es in einer Binärdatei schreiben.
Aus irgendeinem Grund neigt MATLAB und PHP/Python dazu, unterschiedliche Zeichen zu schreiben.
Für Python, ich habe:Char (nicht ASCII) in Matlab

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

Für MATLAB, ich habe:

s = strcat(char(143),char(136)); 
fid = fopen('matlabOut.txt'); 
fwrite(fid, s, 'char'); 
fclose(fid); 

Wenn ich diese beiden Dateien vergleichen, sie sind anders. (mit diff und/oder cmp Befehl).
Mehr über, wenn ich

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

Beide Ausgänge unterschiedlich sind. Ich möchte meinen MATLAB-Code wie Python machen. Was ist falsch mit MATLAB-Code?

+1

Nur um den Lesern zu helfen, können Sie den binären Inhalt der Dateien anzeigen? Warum nehmen Sie an, dass der MATLAB-Code falsch ist? –

+1

Ich denke, es ist nur ein Tippfehler im Code. 143,134 und 143,136. natürlich sind sie anders! Du hast sie anders gemacht. – thang

+0

@than Danke, thang! Das war ein Tippfehler und ich habe das gerade behoben. – user1983388

Antwort

4

Sie versuchen, erweiterte ASCII-Zeichen angezeigt werden, heißt Symbole mit einer ASCII-Zahl von mehr als 128 MATLAB erweiterten ASCII nicht intern verwenden, braucht es 16-Bit-Unicode statt. Wenn Sie dieselben Werte wie im Python-Skript schreiben möchten, verwenden Sie native2unicode, um die gewünschten Zeichen zu erhalten. Beispielsweise gibt native2unicode(136)^ zurück.

4

Die Tatsache, dass die beiden Dateien unterschiedlich sind, scheint offensichtlich; chr(134) ist offensichtlich anders als char(136) :)

In Matlab entsprechen nur die ersten 127 Zeichen (nicht erweiterte) ASCII; alles danach ist Unicode16.

In Python entsprechen die ersten 255 Zeichen (erweitert) ASCII (verwenden Sie unichr() für Unicode).

Jedoch ist unicode 0x88 das gleiche wie extended ASCII 0x88 (wie die meisten anderen). Der Grund dafür, dass Matlab es nicht korrekt anzeigt, liegt an der Tatsache, dass das Matlab-Befehlsfenster Unicode standardmäßig nicht sehr gut behandelt, während Python (das in einem Terminal läuft) wahrscheinlich einen besseren Job macht.

Versuchen Sie, die Schriftart in Matlabs Befehlsfenster zu ändern, oder starten Sie Matlab in einem Terminal und drucken Sie das Zeichen 0x88; Es sollte dasselbe sein.

In jedem Fall sollte die Ausgabe der Zeichen in Datei keinen Unterschied ergeben; es ist nur ein Display Problem.