2013-04-18 13 views
15

Ho un sacco di .txt che dice Notepad ++ (nel menu a discesa "Codifica") sono "ANSI".La codifica che Notepad ++ chiama semplicemente "ANSI", qualcuno sa come chiamarlo per Ruby?

Hanno caratteri tedeschi al loro interno, [äöüß], che vengono visualizzati correttamente in Notepad ++.

Ma non si visualizzano direttamente in irb quando IFile.read 'this is a German text example.txt'.

Quindi qualcuno sa quale argomento dovrei dare a Encoding.default_external=?

(sto supponendo che sarebbe la soluzione, giusto?)

Quando 'utf-8' o 'cp850', legge il file "ANSI" con "äöüß" in esso come "\ XE4 \ XF6 \ XFC \ XDF" ...

(si prega di non esitate a parlare apparentemente 'cose ovvie' nelle vostre risposte,. sono più o meno come newbish come si può essere e ancora sapere quanto basta per fare questa domanda)

+0

dipende dal vostro sistema operativo locale. Per il tedesco o l'inglese, è Windows-1252. Anche se Notepad ++ potrebbe non seguirlo e utilizzarlo come alias per Windows-1252. Sicuramente non è una codifica ISO. Vedi http://en.wikipedia.org/wiki/Windows_ANSI_code_page#ANSI_code_page – Esailija

+0

Grazie, penso che fosse cp1252, sì. –

risposta

10

Ciò che intendono è probabilmente ISO/IEC 8859-1 (alias Latin-1), ISO-8859-1, ISO/IEC 8859-15 (aka Latin-9) o Windows-1252 (alias CP 1252). Tutti e 4 di loro hanno il ä nella posizione 0xE4.

+1

Grazie, penso che fosse cp1252, si. –

3

Penso che sia 'cp1252', alias 'windows-1252'.

Dopo aver letto la risposta di Jörg, sono tornato sulla pagina Encoding su ruby-doc.org cercando di trovare i riferimenti alle codifiche specifiche da lui menzionate e in quel momento ho individuato il metodo Encodings.aliases.

Quindi ho aggiunto il metodo alla fine di questa risposta.

poi ho guardato l'output in Notepad ++, considerandola sia 'ANSI' e UTF-8, e rispetto che per l'output in IRB ...

ho potuto trovare solo due posti nell'output IRB dove il file utf-8 era confuso nello stesso identico modo in cui appariva nel blocco note ++ quando veniva visualizzato come "ANSI", e quei posti erano per cp1252 e cp1254.

cp1252 è apparentemente la mia codifica 'filesystem', quindi vado con quello.

Ho scritto uno script per effettuare copie di tutti i file convertiti in UTF-8, provando sia dal 1252 e 1254.

utf-8 espressioni regolari sembrano funzionare con entrambi i set di file finora.

Ora devo cercare di ricordare cosa stavo effettivamente cercando di compire prima di incappare in tutti questi mal di testa di codifica. 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

ho trovato la risposta a questa domanda sul Forum ++ Notepad, ha risposto nel 2010 da CChris che sembra essere autorevole.

Question: Encoding ANSI?

Risposta:

che sarà la tabella codici di sistema per il computer (codice della pagina 0).

Ulteriori informazioni:

Mostra la pagina di codice corrente.

>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 
Problemi correlati