printした文字の文字化け対策

[HOME] [BACK] [NEXT]

ここでは初心者がperlによるフリーCGIを改造する時に1度は経験する文字化けについて、解説しその対策について述べます。

1.print+ダブルクウォート文字の罠

例えばActivePerlがインストールされたWindows上のコマンドプロンプトで-eオプションを使い、ワンライナープログラムとして

perl -e "print ""表示"";"

と記述してEnterを押すと

侮ヲ 

表示されます。これが「print+ダブルクウォート文字の罠」です。「表」という2バイト文字のS-JISコードは16進で「0×955C」であり、「¥」の「0×5C」を含んでいるため、ダブルクウォートで囲むとperlはこの「5C」の部分をメタ文字の「¥」と解釈してしまい文字化けするのです。 ### 対策1 -- 文字化けする2バイト文字の「5C」の後に「¥」を付加 &yenを2つ連続させれば「¥」という文字、つまり素直に「5C」と認識されるのですから 例えば

print "表¥示";

とすると

表示

と正しく表示されます。 ### 対策2 -- シングルクウォートで囲む 当然シングルクウォートで以下の様にすれば正しく表示されます。

print ´表示´;

対策3 -- CGIプログラム全体をS-JISでないコードで保存する

S-JISを使うから文字化けするので、例えばEUCコードでプログラム全体を保存すれば回避できます。
最近ではperlによる日本語を扱うシステムではutf-8が標準ですので、utf-8を使用するのが良い方法です。

S-JISコードに「0×5C」を含む文字

最後にS-JISコードに「0×5C」を含む2バイト文字をリストアップしておきます。この40文字がすべてです。

文字コード
81 5C
83 5C
Ы 84 5C
87 5C
89 5C
8A 5C
8B 5C
8C 5C
8D 5C
8E 5C
文字コード
8F 5C
90 5C
91 5C
92 5C
93 5C
94 5C
95 5C
96 5C
97 5C
98 5C
文字コード
99 5C
9A 5C
9B 5C
9C 5C
9D 5C
9E 5C
9F 5C
E0 5C
E1 5C
E2 5C
文字コード
E3 5C
E4 5C
E5 5C
E6 5C
E7 5C
E8 5C
E9 5C
EA 5C
ED 5C
EE 5C

[HOME] [BACK] [NEXT]

更新日: