2013-04-18 4 views
15

मेरे पास .txt का एक गुच्छा है जो नोटपैड ++ कहता है (इसके ड्रॉप-डाउन "एन्कोडिंग" मेनू में) "एएनएसआई" हैं।एन्कोडिंग जो नोटपैड ++ बस "एएनएसआई" कहता है, क्या किसी को पता है कि रूबी के लिए इसे क्या कहना है?

उनके पास जर्मन वर्ण हैं, [äöüß], जो नोटपैड ++ में ठीक प्रदर्शित करते हैं।

लेकिन जब मैं File.read 'this is a German text example.txt' उन्हें आईआरबी में सही नहीं दिखाता हूं।

तो क्या किसी को पता है कि मुझे Encoding.default_external= क्या तर्क देना चाहिए?

(मैं, सही मानते हुए कर रहा हूँ कि समाधान हो जाएगा?)

'utf-8' या 'cp850', यह \ XF6 "एएनएसआई" के साथ "äöüß" उस में "के रूप में \ XE4 फ़ाइल को पहचान लेगा \ xFC \ xDF "...

(कृपया संकोच नहीं करते जाहिरा तौर पर उल्लेख करने के लिए" अपने जवाब में स्पष्ट "बातें;। मैं newbish के रूप में काफी हूँ के रूप में आप हो सकता है और अभी भी सिर्फ पर्याप्त पता है कि इस सवाल पूछने के लिए)

+0

यह अपने ओएस वातावरण पर निर्भर करता है। जर्मन या अंग्रेजी के लिए, यह विंडोज -1252 है। हालांकि नोटपैड ++ इसका पालन नहीं कर सकता है और विंडोज़ -1252 के लिए इसे उपनाम के रूप में उपयोग करता है। यह निश्चित रूप से कोई आईएसओ एन्कोडिंग नहीं है। Http://en.wikipedia.org/wiki/Windows_ANSI_code_page#ANSI_code_page – Esailija

+0

धन्यवाद, मुझे लगता है कि यह cp1252 था, हाँ। –

उत्तर

10

उनका मतलब क्या है आईएसओ/आईईसी 885 9 -1 (उर्फ लैटिन -1), आईएसओ -885 9 -1, आईएसओ/आईईसी 885 9-15 (उर्फ लैटिन -9) या विंडोज -1252 (उर्फ सीपी 1252)। उनमें से सभी में पर ä है।

+1

धन्यवाद, मुझे लगता है कि यह cp1252 था, हाँ। –

3

मुझे लगता है कि यह 'cp1252', ऊर्फ 'विंडोज -1252' है।

जोर्ग के उत्तर को पढ़ने के बाद, मैं ruby-doc.org पर Encoding पृष्ठ पर वापस गया, जिसमें उन्होंने निर्दिष्ट विशिष्ट एन्कोडिंग के संदर्भ खोजने की कोशिश की, और जब मैंने Encodings.aliases विधि देखी।

इसलिए मैंने इस उत्तर के अंत में विधि को हटा दिया।

तब मैं नोटपैड में ++ उत्पादन को देखा, दोनों 'एएनएसआई' और utf-8 के रूप में यह देखने, और आईआरबी में उत्पादन के लिए है कि तुलना में ...

मैं केवल आईआरबी उत्पादन में दो स्थानों पर मिल सकता है जहां utf-8 फ़ाइल को उसी तरह से गड़बड़ कर दिया गया था, जैसा कि इसे 'एएनएसआई' के रूप में देखते समय नोटपैड ++ में दिखाई दिया था, और वे स्थान cp1252 और cp1254 के लिए थे।

cp1252 स्पष्ट रूप से मेरा 'फाइल सिस्टम' एन्कोडिंग है, इसलिए मैं इसके साथ जा रहा हूं।

मैं सभी फाइलों की प्रतियां बनाने के लिए एक पटकथा लिखी utf-8 के लिए परिवर्तित कर, की कोशिश कर दोनों 1252 और 1254.

से utf-8 regexes फ़ाइलों के दोनों सेट अब तक के साथ काम करने लगते हैं।

अब मुझे याद रखने की कोशिश करनी है कि मैं वास्तव में को पूरा करने की कोशिश कर रहा था इससे पहले कि मैं इन सभी एन्कोडिंग सिरदर्द में भाग गया। xD

def compare_encodings file1, file2 
    file1_probs = [] 
    file2_probs = [] 

    txt = File.open('encoding_test_output.txt','w') 

    Encoding.aliases.sort.each do |k,v| 
     Encoding.default_external=k 
     ename = [k.downcase, v.downcase].join " --- " 
     s = "" 
     begin 
      s << "#{File.read(file1)}" 
     rescue 
      s << "nope nope nope" 
      file1_probs << ename 
     end 
     s << "\t| #{ename} |\t" 
     begin 
      s << "#{File.read(file2)}" 
     rescue 
      s << "nope nope nope" 
      file2_probs << ename 
     end 
     Encoding.default_external= 'utf-8' 
     txt.puts s.center(58) 
     puts s.center(58) 
    end 
    puts 
    puts "file1, \"#{file1}\" exceptions from trying to convert to:\n\n" 
    puts file1_probs 
    puts 
    puts "file2, \"#{file2}\" exceptions from trying to convert to:\n\n" 
    puts file2_probs 
    txt.close 
end 

compare_encodings "utf-8.txt", "np++'ANSI'.txt" 
5

मैं पर Notepad ++ फोरम इस सवाल का जवाब मिल गया है, CChris द्वारा 2010 में दिए जो आधिकारिक हो रहा है।

Question: Encoding ANSI?

उत्तर:

कि आपके कंप्यूटर (कोड पेज 0) के लिए सिस्टम कोड पृष्ठ हो जाएगा।

अधिक जानकारी:

अपने वर्तमान कोड पृष्ठ दिखाएं।

>help chcp 
Displays or sets the active code page number. 

CHCP [nnn] 

    nnn Specifies a code page number. 

Type CHCP without a parameter to display the active code page number. 

>chcp 
Active code page: 437 

Code Page Identifiers

Identifier .NET Name Additional information 
437   IBM437  OEM United States 
संबंधित मुद्दे