「波ダッシュ(〜)」「全角チルダ」は力技で。

文字コード変換ですが、全部をうまく変換することができませんでした。
結局なところ、UTF-8への変換をしないで利用するのが一番な感じがしています。

それでも、変換が必要な場合もありますので、力技ではありますが、全角チルダ「〜」と全角ハイフン「−」を変換するサンプルをご紹介いたします。
Perlを前提にしていますが、ほかの言語でもちょっと変えれば使えると思います。


1)EUC-JPからUTF-8へ変換する場合の処理です。
my $str = '変換したい文字列'; # ※ EUC-JPで書かれている文字です。

Encode::from_to($str,'euc-jp','utf-8');

$str =~ s/\xE3\x80\x9C/\xEF\xBD\x9E/g; # 全角チルダ
$str =~ s/\xE2\x88\x92/\xEF\xBC\x8D/g; # 全角ハイフン



2)UTF-8からEUC-JPへ変換する場合の処理です。
正規表現を反対にするだけです。
my $str = '変換したい文字列'; # ※ UTF-8で書かれている文字です。

Encode::from_to($str,'utf-8','euc-jp');

$str =~ s/\xEF\xBD\x9E/\xE3\x80\x9C/g; # 全角チルダ
$str =~ s/\xEF\xBC\x8D/\xE2\x88\x92/g; # 全角ハイフン



これだけでは、○で囲まれた1「①」などの機種依存文字などは、うまく変換することができませんでした。ひとつの解決策として、「数値文字参照」を使うのも手じゃないかなと思います。
いかに、数値文字参照に変換した値を一覧にいたします。

たとえば、①を変換する場合には、以下のようにしてください。
$str =~ s/\xE2\x91\xA0/①/g;


これで表示できるようになります。

EUC-JPなどからUTF-8へ変換した際に、文字化けする文字列の一覧表(一部)
文字UTF-8数値文字参照
~\xEF\xBB\xBF\xEF\xBD\x9E~
\xEF\xBC\x8D-
\xE2\x85\xA0Ⅰ
\xE2\x85\xA1Ⅱ
\xE2\x85\xA2Ⅲ
\xE2\x85\xA3Ⅳ
\xE2\x85\xA4Ⅴ
\xE2\x85\xA5Ⅵ
\xE2\x85\xA6Ⅶ
\xE2\x85\xA7Ⅷ
\xE2\x85\xA8Ⅸ
\xE2\x85\xA9Ⅹ
\xE2\x85\xB0ⅰ
\xE2\x85\xB1ⅱ
\xE2\x85\xB2ⅲ
\xE2\x85\xB3ⅳ
\xE2\x85\xB4ⅴ
\xE2\x85\xB5ⅵ
\xE2\x85\xB6ⅶ
\xE2\x85\xB7ⅷ
\xE2\x85\xB8ⅸ
\xE2\x85\xB9ⅹ
\xE2\x86\x90←
\xE2\x86\x91↑
\xE2\x86\x92→
\xE2\x86\x93↓
\xE2\x91\xA0①
\xE2\x91\xA1②
\xE2\x91\xA2③
\xE2\x91\xA3④
\xE2\x91\xA4⑤
\xE2\x91\xA5⑥
\xE2\x91\xA6⑦
\xE2\x91\xA7⑧
\xE2\x91\xA8⑨
\xE2\x91\xA9⑩
\xE2\x91\xAA⑪
\xE2\x91\xAB⑫
\xE2\x91\xAC⑬
\xE2\x91\xAD⑭
\xE2\x91\xAE⑮
\xE2\x91\xAF⑯
\xE2\x91\xB0⑰
\xE2\x91\xB1⑱
\xE2\x91\xB2⑲
\xE2\x91\xB3⑳
\xE3\x88\xB1㈱
\xE3\x88\xB2㈲
\xE3\x88\xB9㈹

参考になれば幸いです。


※ 2010/04/24 すべて書き直しました。
※ 2011/03/09 文字参照など、エスケープされたまま表示されていたのを直しました。
2008.08.10

この記事へのコメント

通りがかり
助かりました。ありがとうございます。
2013/11/11(月)14:37:28
ういすぷ
お役に立てて何よりです!
2013/11/15(金)11:18:18

コメント投稿フォーム