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」の後に「¥」を付加 ¥を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文字がすべてです。
|
|
|
|