Ответ 1
То, что они имеют в виду, вероятно, это ISO/IEC 8859-1 (aka Latin-1), ISO-8859-1, ISO/IEC 8859-15 (aka Latin-9) или Windows-1252 (также известный как CP 1252). Все 4 из них имеют ä
в позиции 0xE4
.
У меня есть группа .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"...
(Пожалуйста, не стесняйтесь упоминать, по-видимому, "очевидные" вещи в своих ответах, я в значительной степени новичок, как вы можете быть, и до сих пор знаете достаточно, чтобы задать этот вопрос.)
То, что они имеют в виду, вероятно, это ISO/IEC 8859-1 (aka Latin-1), ISO-8859-1, ISO/IEC 8859-15 (aka Latin-9) или Windows-1252 (также известный как CP 1252). Все 4 из них имеют ä
в позиции 0xE4
.
Я нашел ответ на этот вопрос на форуме Notepad ++, ответил в 2010 году CChris, который, кажется, авторитетен.
Ответ:
Это будет страница системного кода для вашего компьютера (кодовая страница 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
Я думаю, что это '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"