From: "NARUSE, Yui" Date: 2007-12-29T11:19:55+09:00 Subject: [ruby-dev:32885] Re: Window でのデフォルトエンコーディング 成瀬です。 Martin Duerst wrote: >> 日本でも Shift_JIS と CP932 は別物なので alias じゃまずいですよ。 > > いまだに alias と replica の差はよく分かりませんが、これは > 皆さんと同じみたいですね。 ISO-8859-1 と Windows-1252 のケースで説明します。まずEncoding:: ISO_8859_1 がすでに存在するとしましょう。ここで "ISO_8859_1" でも ISO-8859-1 エンコーディングを参照できるようにしたい場合は alias を使います。 Encoding.find("iso_8859_1") #=> # で、Windows-1252 でも alias を使ってしまうと、 Encoding.find("Windows-1252") #=> # となってしまいます。こうしてしまうと、たとえば、 s = "\x80".force_encoding("Windows-1252") # \x80 は Euro Sign のつもり s.encoding #=> # になっている s.encode("utf-8") #=> \x80 は ISO-8859-1 では定義されていないからエラー s.encode("utf-8", "windows-1252) # これならおっけー となります。 これがいやな場合は replica を使います。Windows-1252 が ISO-8859-1 の replica ですと、 e1 = Encoding.find("Windows-1252") #=> # e2 = Encoding.find("iso_8859_1") #=> # e1 == e2 #=> false s = "\x80".force_encoding("Windows-1252") # \x80 は Euro Sign s.encoding #=> # s.encode("utf-8") #=> "\xE2\x82\xAC" (U+20AC) になる となります。 -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA