• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[perl5.8] SJISから読み込んだ~と)

[perl5.8] SJISから読み込んだ~の文字列マッチングで問題が発生しました

このQ&Aのポイント
  • sjisで書かれたファイルsjis.txtに一文字だけ書いて、utf8で記述したperlスクリプトで文字列マッチングをした際に問題が発生しています。
  • 具体的な問題の発生原因や解決方法について、お知恵をお貸しください。
  • WAVEDASH問題に起因していると考えられますが、詳細はまだ理解できていません。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

過去の質問にも、いくつかこの問題についてでていますが、 要点としては、 Unicodeの~(FF5E)は、シフトJIS~(8160)のマッピングに無くて シフトJIS~(8160)にマッピングされているのは、 Unicodeの〜(301C)の方だということです。 なので、マッチングをみるだけなら 〜(301C)の方を使えば良いです。

ibayac
質問者

お礼

なるほど! BLUEPIXYさんに書いて頂いたキーワードで ぐぐり直した結果、完全に理解することが できました! SJISではFullWidthTilde(~)とWaveDash(〜)を 同一のものとしていましたが、unicodeでは、 違う文字として管理しているんですね。 確かにFullWidthTildeは左肩があがっている波 の様な記号ですが、WaveDashは逆肩が上がって いて、別の記号ですね。 で、Perl5.8が、SJISの~を変換する時に、 間違って(?)WaveDash(〜)の方に変換して しまっているため、僕が書いたソース中の 文字列マッチングのパターンとして記述した ~とはマッチングしなかったわけですね^^ ・参考文献  http://ja.wikipedia.org/wiki/%E5%AE%9F%E4%BD%93%E5%8F%82%E7%85%A7 また、&#数字という表現は、文字コードを 直接指定する記述法ですね。 ・参考文献  http://ja.wikipedia.org/wiki/%E3%83%86%E3%82%A3%E3%83%AB%E3%83%87 今までどの過去ログを見ても理解できません でしたが初めてスッキリと理解できました! BLUEPIXYさん、本当にありがとうございましたm(__)m