質問: utf16の記号のutf8へのエンコード(もしくはマッチ又は削除)がう utf16の記号のutf8へのエンコード(もしくはマッチ又は削除)がうまくいきません。 お世話になります。 前々回、、、、 http://oshiete.goo.ne.jp/qa/6232556.html でutf-16をutf-8に変換する方法を教えていただきました。 (その節は、ありがとうございました) $name=~s/\\u([[:xdigit:]]{4})/chr eval "0x$1"/eg; が、この方法だと、記号が変換されず、例えば、、、 ●「~」 は 「\x{301c} 」 と表示され ●「・」 は 「\x{2022}」 と表示されてしまいます。 これらの記号のデコード方法が調べても分からなかったので、いっそ、削除しちゃえ!とばかりに、、、 「「x」から始まり「}」で終わる文字は根こそぎ削除!というプログラムを組み込んでみたのですが、まったく反応せず。 チェックの為に行った「x」だけの削除ですらマッチせず。。。。 (これでは反応しないはずですね。。。) ということで、utf16の「記号」のutf8へのエンコード(もしくはマッチ又は削除)の方法について、アドバイスいただければ幸いです。
回答: 「~」 は 「\x{301c} 」 と表示され とかいうのは, perl の表示上の問題です. 文字をうまく出力できないときに, このようにコードポイントを使って表示することがあります. これはあくまで「コードポイントが 301c であるような文字」であって「\x{301c} という文字の並び」ではないので, ここが「x」にマッチすることはありません. どのように出力しているのかを (行っているなら出力の前の encode も含めて) 見せてくれれば, なんとかなるかもしれんけど.... ただ, 特にコードポイント 301c についてはいろいろ問題があるので, 一筋縄にはいかない可能性を覚悟してください.