- ベストアンサー
機種依存文字定義エラーを回避する方法
$a = 'VIII';←Windowsの機種依存文字と思ってください を定義するとエラーになります。 機種依存文字であることは承知の上ですが、対策は無いものでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ども#1で補足要求した者です。 多分代入した機種依存文字を 何処かで文字結合や正規表現で 触っているはずです。 エラーはそこで出ているはずです。 実際代入して即プリントするコーディングは 正常に動くはずです。 $a='VIII'; print $a; Perlでは1バイト単位で文字を考えますので 「VIII」はPerlでは「?[」と解釈しています。 VIII→ShiftJISでの文字コード「0x875b」 1バイトずつ考えると 「0x5b」→ASCII文字「[」 ですのでPerlでは 構文上意味のある文字です。 正規表現等で使用すると 意図しないエラーが出てきます。 また機種依存文字は 文字通り特定の機種に依存していますので 当然の如くその機種の使用文字コードにも 依存しています。 WinならShiftJISですね。 ですので他の文字コードに変換しても 表示される可能性は低いです。 VIIIをEUCに変換しても VIIIとは表示してくれないです。 回避法としては 最初にその文字を何かに置き換えておいて 文字列を処理後 表示する前にまた機種依存文字に置きかえる というのがお手軽かなと思います。
その他の回答 (3)
- haporun
- ベストアンサー率40% (230/562)
いまならUTF-8でしょう! ところで実行環境は? どうしてもShift_JISにしたいなら、'VIII' の代わりに "\x87\x5B" って書くとか。 ちなみにたぶん文字コードこれでいいと思います。
お礼
勉強になりました。 ありがとうございました。
- yaya999
- ベストアンサー率50% (4/8)
文字コードの問題のような気がします。以前に私も同様の現象で悩みました。 私の場合はフォームより、CGIへ ”ー” をPOSTするとServer Errorが発生していまして、ソースをEUCにすることで解決しました。 機種依存文字の中には¥でエスケープしただけでは正しく処理されないものもあるようです。 下記へ参考にしたURLを記載しておきます。
お礼
勉強になりました。 ありがとうございました。
- bricks
- ベストアンサー率69% (16/23)
状況がよく分かりませんね。 エラーというのが 「プログラムが異常終了する」のか 「文字化けする」のか どちらなのでしょう。 機種依存文字も所詮文字コードなので ただ代入しただけで異常終了というのは 考え難いです。 異常終了するのであれば その後のコーディングに問題があるのでは?
補足
ありがとうございます。 プログラムが異常終了するのです。 >機種依存文字も所詮文字コードなので >ただ代入しただけで異常終了というのは >考え難いです。 私もそう思いますが、この行だけコメントアウトすると正常に動くのです。 ということは、この行に問題があるということですよね? $a = "VIII"; や $a = "\VIII"; とかも試しましたが、結果は同じでした。 考えられる事がありましたらご助言お願いします。
お礼
勉強になりました。 ありがとうございました。