2013-01-17 24 views
8

में चार (गैर ascii) मेरे पास तीन अक्षर हैं (127 से बड़ा) और मुझे इसे बाइनरी फ़ाइल में लिखना होगा।
किसी कारण से, MATLAB और PHP/पायथन एक अलग वर्ण लिखने के लिए जाता है।
पायथन के लिए, मेरे पास है:मैटलैब

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 ˆ 

दोनों outputs अलग हैं करते हैं। मैं अपने MATLAB कोड को पायथन के समान बनाना चाहता हूं। MATLAB कोड के साथ क्या गलत है?

+1

बस पाठकों की मदद करने के लिए, क्या आप फ़ाइलों की बाइनरी सामग्री दिखा सकते हैं? साथ ही, आप मानते हैं कि यह MATLAB कोड क्यों गलत है? –

+1

मुझे लगता है कि यह कोड में सिर्फ एक टाइपो समस्या है। 143,134 और 143,136। बेशक वे अलग हैं! आपने उन्हें अलग बना दिया। – thang

+0

@thang धन्यवाद, थांग! वह एक टाइपो था और मैंने बस इसे ठीक कर दिया। – user1983388

उत्तर

4

आप विस्तारित ASCII वर्ण प्रदर्शित करने के लिए कोशिश कर रहे हैं, एक ASCII संख्या से अधिक 128 MATLAB आंतरिक एक्स्टेंडेड ASCII का उपयोग नहीं करता साथ यानी प्रतीकों, यह 16-बिट यूनिकोड बजाय का उपयोग करता है।

यदि आप पाइथन लिपि में समान मान लिखना चाहते हैं, तो इच्छित वर्ण प्राप्त करने के लिए native2unicode का उपयोग करें। उदाहरण के लिए, native2unicode(136)^ देता है।

4

तथ्य यह है कि दो फाइलें अलग हैं; chr(134)char(136) से स्पष्ट रूप से अलग है :)

Matlab में, केवल पहले 127 वर्ण ASCII के अनुरूप हैं (गैर-विस्तारित) ASCII; उसके बाद कुछ भी यूनिकोड 16 है।

Python में, पहले 255 वर्ण (विस्तारित) ASCII के अनुरूप हैं (यूनिकोड के लिए unichr() का उपयोग करें)।

हालांकि, unicode 0x88 extended ASCII 0x88 जैसा है (जैसा कि अन्य में से अधिकांश हैं)। कारण मैटलैब इसे सही तरीके से प्रदर्शित नहीं करता है, इस तथ्य के कारण है कि मैटलैब कमांड विंडो यूनिकोड को डिफ़ॉल्ट रूप से बहुत अच्छी तरह से नहीं मानती है, जबकि पायथन (टर्मिनल में चल रहा है या इसलिए मुझे लगता है) आमतौर पर बेहतर काम करता है।

मैटलैब की कमांड विंडो में फ़ॉन्ट बदलने का प्रयास करें, या टर्मिनल में मैटलैब शुरू करें और 0x88 वर्ण मुद्रित करें; यह वही होना चाहिए।

किसी भी मामले में, फ़ाइल के लिए वर्णों के आउटपुट का कोई फर्क नहीं पड़ता; यह सिर्फ प्रदर्शन समस्या है।