Кодировка, которую Notepad ++ просто вызывает "ANSI", знает кто-нибудь, что назвать Ruby?

У меня есть группа .txt, которую Notepad ++ говорит (в раскрывающемся меню "Кодирование" ) "ANSI".

В них есть немецкие персонажи, [äöüß], которые отлично отображаются в Notepad ++.

Но они не отображаются прямо в irb, когда я File.read 'this is a German text example.txt' их.

Так кто-нибудь знает, какой аргумент я должен дать Encoding.default_external=?

(Я предполагаю, что это будет решение, верно?)

Когда 'utf-8' или 'cp850', он читает файл ANSI с "äöüß" в нем как "\ xE4\xF6\xFC\xDF"...

(Пожалуйста, не стесняйтесь упоминать, по-видимому, "очевидные" вещи в своих ответах, я в значительной степени новичок, как вы можете быть, и до сих пор знаете достаточно, чтобы задать этот вопрос.)

Ответы

Ответ 1

То, что они имеют в виду, вероятно, это ISO/IEC 8859-1 (aka Latin-1), ISO-8859-1, ISO/IEC 8859-15 (aka Latin-9) или Windows-1252 (также известный как CP 1252). Все 4 из них имеют ä в позиции 0xE4.

Ответ 2

Я нашел ответ на этот вопрос на форуме Notepad ++, ответил в 2010 году CChris, который, кажется, авторитетен.

Вопрос: Кодирование 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

Идентификаторы кодовой страницы

Identifier  .NET Name  Additional information
437         IBM437     OEM United States

Ответ 3

Я думаю, что это 'cp1252', псевдоним 'windows-1252'.

После прочтения ответа Йорг, я вернулся через страницу Encoding на ruby-doc.org, пытаясь найти ссылки на конкретные кодировки он упомянул, и что когда я заметил метод Encodings.aliases.

Итак, я отложил метод в конце этого ответа.

Затем я просмотрел вывод в блокноте ++, просмотрев его как "ANSI" и "utf-8", и сравнил его с выходом в irb...

Я мог найти только два места на выходе irb, где файл utf-8 исказился точно так же, как он появился в блокноте ++ при просмотре его как "ANSI", и эти места были для cp1252 и cp1254.

cp1252, по-видимому, является моей кодировкой "файловой системы", поэтому я собираюсь с этим.

Я написал script, чтобы сделать копии всех файлов, преобразованных в 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"