ハードなソフトの話

アクセスカウンタ

help RSS Perl 5.8.x で shiftjis 、CP932、MacJapanese の違い

<<   作成日時 : 2008/02/05 00:14   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 4 / トラックバック 1 / コメント 0

perldoc の Encode::JP を読むと、Shift JISには3種類ある。
  • shiftjis - MS Kanji
  • CP932 - CODE PAGE 932 = Shift JIS + MS/IBM vendor mappings
  • MacJapanese - Shift JIS + Apple vendor mappings

うっすらとわかっているけれど、気持ち悪いので調べてみた。
Wikipedia に詳しい解説があった。

この3つの encoding について具体的に把握する方法を考えてみた。3種類のencoding に含まれる文字をUnicodeテキストファイルに保存して Perl でそれぞれの encoding でShift JISテキストファイルを作成して、どの文字がエラーになるか調べてみればいい。
こんなプログラムを作ってみた。

use utf8;
use strict;
use warnings;

open my $fin, "<:encoding(utf16BE)", "test_u2s_utf16be.txt" or die;
my @lines = <$fin>;
close $fin;
$lines[0] =~ s/\x{feff}//;
exit;
foreach my $name ( qw/shiftjis cp932 MacJapanese/ ){
  open  my $fout, ">:encoding($name)","test_u2s_$name.txt" or die;
  print $fout @lines;
  close $fout;
}


このプログラムを実行すると、Unicode のファイルを読み込んで3種類のテキストファイルを出力する。

次のようなテキストファイルを作成してUTF-16BEでファイル名をtest_u2s_utf16be.txtとして保存した。

NEC: JIS X 0212-1990

NEC: JIS X 0213:2004
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ ㍉ ㌔ ㌢ ㍍ ㌘ ㌧ ㌃ ㌶ ㍑ ㍗ ㌍ ㌦ ㌣ ㌫ ㍊ ㌻ ㎜ ㎝ ㎞ ㎎ ㎏ ㏄ ㎡ ㍻ 〝 〟 № ㏍ ℡ ㊤ ㊥ ㊦ ㊧ ㊨ ㈱ ㈲ ㈹ ㍾ ㍽ ㍼ ≒ ≡ ∫ ∮ √ ⊥ ∠ ∟ ⊿ ∵ ∩ ∪

IBM: 人名用漢字(2004年改正)
寬 薰 瀨 增 德 賴 朗 橫 黑 緖 諸 祥 神 都 福 郞

IBM: JIS X 0212-1990
№ 丨 仡 伀 伃 伹 佖 侊 侒 侔 侚 俉 俍 俿 倞 倢 偀 偂 偆 偰 傔 僘 兊 兤 冝 冾 刕 劜 劦 劯 勀 勛 匀 卲 厓 厲 叝 咜 咩 哿 喆 坥 垬 埇 埈 墲 夋 奓 奛 奝 奣 妤 妺 孖 寀 寘 尞 岦 岺 崧 嵂 嵭 嶸 嶹 巐 弡 弴 彅 彧 忞 恝 悊 惕 惞 惲 愑 愰 愷 憘 戓 抦 揵 摠 撝 擎 昀 昉 昕 昞 昤 昮 昱 晗 晙 曻 晳 暙 暠 暲 暿 曺 朎 杦 枻 柀 桒 桄 棈 棏 楨 榘 槢 樰 橆 橳 橾 櫤 毖 氿 汜 汯 沆 泚 洄 浯 涇 涖 涬 淏 淼 渧 渹 渼 湜 溿 澈 澵 濵 瀅 瀇 炅 炫 焄 焏 煆 煇 煜 燁 燾 犱 犾 猤 獷 玽 珉 珒 珖 珣 珵 琇 琦 琩 琪 琮 瑢 璉 璟 甯 畯 皛 皜 皦 睆 砡 硎 硤 硺 禔 禛 竑 竫 箞 絈 絜 綷 繒 纊 罇 羡 茁 荿 菇 菶 葈 蒴 蓜 蕓 蕙 蕫 裵 褜 訒 訷 詹 誧 誾 諟 諶 譓 賰 贒 軏 遧 鄧 釗 釚 釞 釤 釥 釭 釮 鈆 鈊 鈐 鈹 鈺 鈼 鉀 鉎 鉑 鉙 鉧 鉷 鉸 銈 銧 鋐 鋓 鋕 鋗 鋙 鋠 鋧 鋹 鋻 鋿 錂 錝 錞 錡 錥 鍈 鍗 鍰 鎤 鏆 鏞 鏸 鐱 鑅 鑈 隝 隯 霳 靃 靏 靕 顗 顥 餧 驎 髜 魵 鮏 鮱 鮻 鰀 鵫 鵰 鸙

IBM JIS X 0213:2004
ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ ¬ ¦ ' " ㈱ № ℡ ∵ 丨 仡 伃 佖 侊 侔 俉 偀 傔 兊 冝 刕 勛 匀 匇 厓 厲 咜 咩 哿 喆 﨏 埇 埈 塚 增 奝 妤 孖 寘 寬 尞 岺 崧 﨑 嵓 嵭 嶸 弴 彅 彧 德 忞 惕 愰 愷 揵 摠 擎 昀 昉 昕 昞 昤 昱 曻 晙 晥 晳 暠 暲 曺 朗 杦 枻 柀 栁 桒 棈 楨 﨔 槢 橫 橳 櫤 毖 汜 沆 洄 涇 涬 淼 湜 澈 濵 瀅 瀨 炅 炫 焏 煆 煇 煜 凞 燁 燾 犾 猪 珉 珖 珣 琇 琦 琪 琮 瑢 璉 璟 甁 甯 畯 皛 皞 皦 睆 硎 神 祥 福 竫 箞 絈 絜 綠 緖 繒 纊 罇 茁 荢 菇 葈 蒴 蕙 﨟 薰 裵 褜 訒 訷 詹 誧 諟 諶 諸 賴 贒 郞 都 鄕 鄧 釗 釤 釥 釭 鈐 鈹 鈺 鈼 鉀 鉸 銈 鋓 鋠 鋿 錡 錥 鍈 鍰 鏆 鏞 隆 隝 霳 霻 靍 靏 顗 顥 馞 驎 魲 魵 鮏 鰀 鵰 黑 伀 侒 侚 倞 倢 偂 偆 偰 劦 劯 匤 咊 垬 夋 奛 寀 岦 嵂 嶹 悊 惲 憘 抦 撝 晗 暙 暿 桄 﨓 棏 榘 樰 橆 橾 氿 泚 淏 渧 渼 溿 澵 瀇 炻 焄 犱 獷 皜 砡 硤 礰 禔 禛 竑 竧 綷 荿 蓜 蕓 蘒 﨡 誾 譿 賰 﨤 釚 釮 鈊 鉎 鉑 鉙 鉧 銧 鋐 鋗 鋙 鋧 鋹 鋻 錂 錝 錞 鍗 鑅 隯 靕 髜 鮱 鵫 鸙

MAC:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ➉ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇
❶ ➋ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛
Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ
㎎ ㎏ ㎜ ㎝ ㎡ ㏄
№ ℡
♠ ♤ ♥ ♡ ♦ ♢ ♣ ♧
〠 ☎ 〄
☝ ☟ ☞ ☜ ⇧ ⇩ ⇨ ⇦
㈹ ㈱ ㈲
㊤ ㊦ ㊨ ㊧
㌢ ㌃ ㌍ ㌔ ㌘ ㌢ ㍿

ゔ ヷ ヸ ヹ ヺ


変換できなかった文字は \x{0123}という感じで16進数で表示される。

test_u2s_shiftjis.txt の結果は次の通り。

NEC: JIS X 0212-1990
\x{2116}
NEC: JIS X 0213:2004
\x{2460} \x{2461} \x{2462} \x{2463} \x{2464} \x{2465} \x{2466} \x{2467} \x{2468} \x{2469} \x{246a} \x{246b} \x{246c} \x{246d} \x{246e} \x{246f} \x{2470} \x{2471} \x{2472} \x{2473} \x{2160} \x{2161} \x{2162} \x{2163} \x{2164} \x{2165} \x{2166} \x{2167} \x{2168} \x{2169} \x{3349} \x{3314} \x{3322} \x{334d} \x{3318} \x{3327} \x{3303} \x{3336} \x{3351} \x{3357} \x{330d} \x{3326} \x{3323} \x{332b} \x{334a} \x{333b} \x{339c} \x{339d} \x{339e} \x{338e} \x{338f} \x{33c4} \x{33a1} \x{337b} \x{301d} \x{301f} \x{2116} \x{33cd} \x{2121} \x{32a4} \x{32a5} \x{32a6} \x{32a7} \x{32a8} \x{3231} \x{3232} \x{3239} \x{337e} \x{337d} \x{337c} ≒ ≡ ∫ \x{222e} √ ⊥ ∠ \x{221f} \x{22bf} ∵ ∩ ∪
(...以下省略...)

ほぼ、変換できなかった。拡張文字はほぼ変換しない。環境に依存する拡張文字を厳格にチェックしたい時に使える。

HP-UXなんかにファイルをもってくときはいいかもしれない。

test_u2s_cp932.txtの結果は次の通り。


NEC: JIS X 0212-1990

NEC: JIS X 0213:2004
@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] _ ` a b c d e f g h i j k l m n o p q r s t u ~ ≒ ≡ ∫ √ ⊥ ∠ ∵ ∩ ∪

IBM: 人名用漢字(2004年改正)
ェ P コ ョ K ゥ ~ キ カ

IBM: JIS X 0212-1990
h i k l m n p o r q a s v w u t z x y { } ~ w 。 「 」 、 ・ ヲ ァ ゥ ォ ャ ュ ッ イ ウ エ オ カ キ ク g ケ サ シ セ タ ソ ツ テ ナ ト ニ ヌ ネ ノ ハ ヒ フ ホ ム マ モ ヤ メ c ヨ ラ f ル レ ロ ワ ン ゙ ゚ d @ A B E H F I G J K L M N O Q R T S V W U Y Z [ \ ] _ ` a d b c f e g i h j k l m ィ o s q t v x y z { \ ` 「 ] 」 、 ・ ヲ ァ ィ ェ ォ ュ ッ イ オ ケ サ コ シ ソ タ ス セ チ テ ツ ハ ト ニ ナ ヌ ノ ネ ヒ ヘ ホ _ フ メ ヨ ヤ ミ ム ユ マ e ル ワ ゙ ン ロ リ ラ ^ ゚ @ A C D E F H G J

IBM JIS X 0213:2004
@ A B C D E F G H I T U V W X Y Z [ \ ] ¬ U V W ∵ h i l n p r a t { ~ 「 、 ヲ ゥ ェ ォ ュ ッ ア ー ウ エ ク g ケ コ サ タ ナ ト ノ ハ フ ホ ム マ モ ヤ c f ラ ユ ル ロ ワ ゙ d A E G K M N P Q R S V W U X Y Z \ ^ a b c e g h j k l m n ィ o s r t v y ~ \ 「 ] 」 、 ・ ヲ ィ ェ ゥ ョ ッ カ キ ク ケ サ ソ タ ス ツ ハ ト ニ ナ ホ _ ヨ ユ ワ リ ラ ^ ゚ B A C F G K k o q w u z x y w 。 ァ ャ イ オ セ ツ ニ ネ ヒ ヨ レ ン B H I J L O b T [ _ q x z | ` ァ ャ ュ ウ コ セ テ ヌ ノ ネ ヒ フ メ ミ ム マ e ル ゙ ン ロ @ D H J

MAC:
@ A B C D E F G H I J K L M N O P Q R S
\x{2474} \x{2475} \x{2476} \x{2477} \x{2478} \x{2479} \x{247a} \x{247b} \x{247c} \x{2789} \x{247e} \x{247f} \x{2480} \x{2481} \x{2482} \x{2483} \x{2484} \x{2485} \x{2486} \x{2487}
\x{2776} \x{278b} \x{2778} \x{2779} \x{277a} \x{277b} \x{277c} \x{277d} \x{277e} \x{277f}
\x{2488} \x{2489} \x{248a} \x{248b} \x{248c} \x{248d} \x{248e} \x{248f} \x{2490} \x{2491} \x{2492} \x{2493} \x{2494} \x{2495} \x{2496} \x{2497} \x{2498} \x{2499} \x{249a} \x{249b}
T U V W X Y Z [ \ ]
r s o p u t

\x{2660} \x{2664} \x{2665} \x{2661} \x{2666} \x{2662} \x{2663} \x{2667}
\x{3020} \x{260e} \x{3004}
\x{261d} \x{261f} \x{261e} \x{261c} \x{21e7} \x{21e9} \x{21e8} \x{21e6}


a e i ` c a \x{337f}

ヴ \x{30f7} \x{30f8} \x{30f9} \x{30fa}


Windows の範囲で文字コードを交換するには一番いいと思われる。
携帯電話用のCGIにCP932を使う人もいるけれど機種別対応をしないのなら shiftjisにして encoding エラーをきちんと処理したほうがいいかもしれない。この件は、もう少し詳しく調べないとわからないなあ…。

test_u2s_MacJapanese.txt の結果は、Macがないので表示できない。
IBM拡張漢字は全滅だった。

なんだかんだでShift JISはトラブルメーカーなので Shift JISのテキストファイルがあったら早めに Unicodeに変換して使ったほうが柔軟性が高いと思われる。

テーマ

関連テーマ 一覧

月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 4
なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
面白い

トラックバック(1件)

タイトル (本文) ブログ名/日時
ActivePerl 5.8.X で日本語処理をする
Windows で ActivePerl 5.8.X 以降を使う場合、次のように宣言すると、標準入出力やPerl/Tkも日本語で使えるようになる。ソースプログラムも Shift-JISコードで保存できるようになって便利。 ...続きを見る
ハードなソフトの話
2008/02/06 22:24

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Perl 5.8.x で shiftjis 、CP932、MacJapanese の違い ハードなソフトの話/BIGLOBEウェブリブログ
[ ]