dポイントプレゼントキャンペーン実施中!

perlでパソコンと出力するとパャRンと表示されてしまいます。
エディターはwindowsのメモ帳で文字コードはANSIでファイルを作りました。


#!/usr/bin/perl

print "Content-type: text/html;charset=Shift_JIS\n\n";
print "<HTML>";
print "<BODY>\n";
print "パソコン<BR>\n";
print "</BODY>\n";
print "<HTML>";
exit;

A 回答 (2件)

メモ帳での漢字はShift-JISで表現されます。


Shift-JISの文字コードは、漢字1文字を2バイトで表現します。
この2バイトの中には、"\"や"|"などPerlでは特定の処理を行ってしまう文字列が含まれます。
例えば「パソコン」の「ソ」は、Shift-JISでは0x835C。
2バイト目の0x5Cだけ見ると、"\"の文字コードと同じです。

perlでは""中に\があった場合、エスケープシーケンス記号として処理します。(例:\n=改行)
つまり、「パソコン」とShift-JISで記述すると、ソの2バイト目は\として処理され、ソの次の文字の1バイト目はエスケープシーケンスとして処理されてしまうのです。

Perlでは"\"という文字を出したい場合、"\\"と記述します。
この場合、
print "パソ\コン<br>\n";
と、ソの後ろに\を挿入する事で解決できます。

Shift-JISでこの問題は様々な文字で発生します。
なお、printだけならまだしも正規表現ではもっと多くの漢字が正しく処理出来ない要員をはらんでいます。

Windows上では面倒ですが、EUC等の文字コードではこの問題は起きませんので、文字コードを変えるのが良い対策方法かと思います。
    • good
    • 0
この回答へのお礼

spinach-chickenさん回答ありがとうございます。
print "パソ\コン<br>\n";
でパソコンと表示されました。

お礼日時:2004/12/10 22:26

まず、文字コードの確認ですが、


ANSIは米国規格協会の略で、
日本語に関しては定義されていません。
また、その場合は「ISO」ですよね?
メモ帳でShiftJIS以外の文字コードを扱うことは
出来なかったと思うので、ShiftJISと仮定して進めます。

「パソコン」は16進数で「8370835c83528393」
「パャRン」は16進数で「83708383528393」
つまり文字コードの5c=「\」が抜けている状態にになっています。
「\」の文字を削除する設定をどこかで行なっていませんか?
    • good
    • 0
この回答へのお礼

sisyaさん回答ありがとうございます。

お礼日時:2004/12/10 22:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!