ruby character-encoding notepad++ diacritics codepages

La codificación que Notepad++ simplemente llama "ANSI", ¿alguien sabe cómo llamarlo para Ruby?



character-encoding diacritics (3)

Tengo un montón de .txt que dice Notepad ++ (en su menú desplegable "Codificación") son "ANSI".

Tienen caracteres alemanes, [äöüß], que se muestran bien en Notepad ++.

Pero no aparecen justo en irb cuando I File.read ''this is a German text example.txt'' ellos.

Entonces, ¿alguien sabe qué argumento debería dar Encoding.default_external= ?

(Supongo que esa sería la solución, ¿verdad?)

Cuando ''utf-8'' o ''cp850'' , lee el archivo "ANSI" con "äöüß" como "/ xE4 / xF6 / xFC / xDF" ...

(Por favor, no dude en mencionar las cosas aparentemente "obvias" en sus respuestas; soy casi tan nuevo como puede y aún sé lo suficiente para hacer esta pregunta).


Creo que es ''cp1252'', alias ''windows-1252''.

Después de leer la respuesta de Jörg, volví a la página de Encoding en ruby-doc.org tratando de encontrar referencias a las codificaciones específicas que mencionó, y ahí fue cuando descubrí el método Encodings.aliases .

Así que dejé el método al final de esta respuesta.

Luego miré la salida en notepad ++, viéndolo como ''ANSI'' y utf-8, y comparé eso con la salida en irb ...

Solo pude encontrar dos lugares en la salida irb donde el archivo utf-8 estaba distorsionado de la misma forma en que aparecía en notepad ++ al verlo como ''ANSI'', y esos lugares eran para cp1252 y cp1254.

cp1252 es aparentemente mi codificación de ''sistema de archivos'', así que voy con eso.

Escribí un script para hacer copias de todos los archivos convertidos a utf-8, probando ambos desde 1252 y 1254.

Las expresiones regulares de utf-8 parecen funcionar con ambos conjuntos de archivos hasta ahora.

Ahora tengo que tratar de recordar lo que realmente estaba tratando de lograr antes de encontrarme con todos estos dolores de cabeza de codificación. 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"


Encontré la respuesta a esta pregunta en el Notepad ++ Forum, respondido en 2010 por CChris, que parece tener autoridad.

Pregunta: ¿ Codificación ANSI?

Responder:

Esa será la página de códigos del sistema para su computadora (página de códigos 0).

Más información:

Muestra tu página de códigos actual.

>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

Identificadores de la página de códigos

Identifier .NET Name Additional information 437 IBM437 OEM United States


Lo que quieren decir es probablemente ISO / IEC 8859-1 (también conocido como Latin-1), ISO-8859-1, ISO / IEC 8859-15 (también conocido como Latin-9) o Windows-1252 (también conocido como CP 1252). Todos los 4 tienen la ä en la posición 0xE4 .