Notepad ++が(ドロップダウンの[エンコード]メニューで) "ANSI"と言っている.txtがたくさんあります。
それらにはドイツ語の文字[äöüß]が含まれており、Notepad ++では問題なく表示されます。
しかし、私はFile.read 'this is a German text example.txt'
それら。
だから誰も私が与えるべき引数を知っていますかEncoding.default_external=
?
(それが解決策になると思いますよね?)
いつ 'utf-8'
または'cp850'
、「äöüß」を含む「ANSI」ファイルを「\ xE4\xF6\xFC\xDF」として読み込みます...
(回答の中で明らかに「明白な」ことについて言及することを躊躇しないでください。私はあなたができる限り同じくらい初心者ですが、この質問をするのに十分なだけ知っています。)
それらが意味することはおそらくISO/IEC 8859-1(別名Latin-1)、ISO-8859-1、ISO/IEC 8859-15(別名Latin-9)またはWindows-1252(別名CP 1252)です。それらの4つすべてにä
位置0xE4
。
私はこの質問への回答をNotepad ++フォーラムで見つけました。
回答:
これは、コンピューターのシステムコードページになります(コードページ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」だと思います。
Jörgの回答を読んだ後、Ruby-doc.orgの Encoding ページに戻り、彼が言及した特定のエンコーディングへの参照を見つけようとしたところ、Encodings.aliases
メソッドを見つけました。
そのため、この回答の最後にメソッドをまとめました。
次に、notepad ++で出力を見て、「ANSI」とutf-8の両方として表示し、irbの出力と比較しました...
Utf-8ファイルが 'ANSI'として表示したときにNotepad ++で表示されたのとまったく同じ方法で文字化けしたirb出力の2つの場所しか見つけることができませんでした。それらの場所はcp1252とcp1254用でした。
cp1252はどうやら私の「ファイルシステム」エンコーディングなので、それを使用します。
1252と1254の両方を試し、utf-8に変換されたすべてのファイルのコピーを作成するスクリプトを作成しました。
これまでのところ、utf-8正規表現は両方のファイルセットで機能するようです。
これらのエンコーディングの頭痛の種に遭遇する前に、私が実際にaccomplishしようとしていたことを思い出す必要があります。 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"