• ベストアンサー

~文字が認識されない?

ActivePerl5.8.8 です。 sjisのファイルを読み込んで、utf8で出力しています。 +++++++++++++++++++++++++++++++++++++++++++ open (IN, '<', ${filename}); my $contents = do { local $/; decode('shiftjis', <IN>)}; close IN; open OUT, '>', "${out}.txt"; print OUT encode('utf8', ${contents}); close OUT; +++++++++++++++++++++++++++++++++++++++++++ "~"というsjisの記号文字が"?"となって出力されてしまいます。 "~"のまま出力する方法がありましたら教えてください。

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

  • ベストアンサー
回答No.2

Windowsには独り善がりな所があって、 CP932 を シフトJIS と呼び、 UTF16LE を Unicode と呼んだりしています。 Perlで使用する場合、 shiftjis (一般のシフトJIS) ではなく、 CP932 (Windows独自のシフトJIS) を指定します。 WindowsのActivePerlでシフトJIS文字列を扱うときは、多くの場合、 CP932 を指定した方が問題が少ないです。

参考URL:
http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932
palayo
質問者

お礼

CP932 としたら正常に~が出力されました!! 感激! ありがとうございました!!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • vaidurya
  • ベストアンサー率45% (2714/5983)
回答No.1

波線あるいはウェーブダッシュと呼ばれるこの記号には、実は見た目が同じ いくつかの記号があります。文字コード変換でややこしくて Mozillaプロジェクト方面でも紆余曲折あったと記憶しています。 (英語圏の人とSJISの記号の話をしてもすんなり進まなかったようです) 変換テーブルが対応できていないって問題になると思います。 場合によっては個別に変換ルーチンを設ける必要が出るかもしれません。

すると、全ての回答が全文表示されます。

関連するQ&A