• ベストアンサー

機種依存文字定義エラーを回避する方法

$a = 'VIII';←Windowsの機種依存文字と思ってください を定義するとエラーになります。 機種依存文字であることは承知の上ですが、対策は無いものでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • bricks
  • ベストアンサー率69% (16/23)
回答No.4

ども#1で補足要求した者です。 多分代入した機種依存文字を 何処かで文字結合や正規表現で 触っているはずです。 エラーはそこで出ているはずです。 実際代入して即プリントするコーディングは 正常に動くはずです。 $a='VIII'; print $a; Perlでは1バイト単位で文字を考えますので 「VIII」はPerlでは「?[」と解釈しています。 VIII→ShiftJISでの文字コード「0x875b」 1バイトずつ考えると 「0x5b」→ASCII文字「[」 ですのでPerlでは 構文上意味のある文字です。 正規表現等で使用すると 意図しないエラーが出てきます。 また機種依存文字は 文字通り特定の機種に依存していますので 当然の如くその機種の使用文字コードにも 依存しています。 WinならShiftJISですね。 ですので他の文字コードに変換しても 表示される可能性は低いです。 VIIIをEUCに変換しても VIIIとは表示してくれないです。 回避法としては 最初にその文字を何かに置き換えておいて 文字列を処理後 表示する前にまた機種依存文字に置きかえる というのがお手軽かなと思います。

abiru
質問者

お礼

勉強になりました。 ありがとうございました。

その他の回答 (3)

  • haporun
  • ベストアンサー率40% (230/562)
回答No.3

いまならUTF-8でしょう! ところで実行環境は? どうしてもShift_JISにしたいなら、'VIII' の代わりに "\x87\x5B" って書くとか。 ちなみにたぶん文字コードこれでいいと思います。

abiru
質問者

お礼

勉強になりました。 ありがとうございました。

  • yaya999
  • ベストアンサー率50% (4/8)
回答No.2

文字コードの問題のような気がします。以前に私も同様の現象で悩みました。 私の場合はフォームより、CGIへ ”ー” をPOSTするとServer Errorが発生していまして、ソースをEUCにすることで解決しました。 機種依存文字の中には¥でエスケープしただけでは正しく処理されないものもあるようです。 下記へ参考にしたURLを記載しておきます。

参考URL:
http://www.din.or.jp/~ohzaki/perl.htm#JP_EUC_JP
abiru
質問者

お礼

勉強になりました。 ありがとうございました。

  • bricks
  • ベストアンサー率69% (16/23)
回答No.1

状況がよく分かりませんね。 エラーというのが 「プログラムが異常終了する」のか 「文字化けする」のか どちらなのでしょう。 機種依存文字も所詮文字コードなので ただ代入しただけで異常終了というのは 考え難いです。 異常終了するのであれば その後のコーディングに問題があるのでは?

abiru
質問者

補足

ありがとうございます。 プログラムが異常終了するのです。 >機種依存文字も所詮文字コードなので >ただ代入しただけで異常終了というのは >考え難いです。 私もそう思いますが、この行だけコメントアウトすると正常に動くのです。 ということは、この行に問題があるということですよね? $a = "VIII"; や $a = "\VIII"; とかも試しましたが、結果は同じでした。 考えられる事がありましたらご助言お願いします。

関連するQ&A

専門家に質問してみよう