SJISのコード表をUTF8に変換する
波ダッシュ問題とかで気になったので確認してみることにする。
まず、検証用のhtmlを作ってみた。
UPPER = (0x81..0x9F).to_a + (0xE0..0xFC).to_a LOWER = (0x40..0x7E).to_a + (0x80..0xFC).to_a HEADER = <<_EOF_ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <table> _EOF_ FOOTER = <<_EOF_ </table> </body> </html> _EOF_ print HEADER puts "<tr><td></td>" + (UPPER.map do |c| "<td>%02X</td>" % c end.join) + "</tr>" LOWER.each do |l| printf "<tr><td>0x%x</td>", l UPPER.each do |u| printf "<td>%c%c</td>", u, l end puts "</tr>" end print FOOTER
んで、これをUTF8に変換するのだが、ここではPHPのmb_convert_encodingを使ってみた。
<?php $buf = file("sjis.html"); foreach($buf as $line) { print mb_convert_encoding($line, 'utf8', 'sjis-win'); } ?>
ここで、第3引数のsjis-winは、波ダッシュをちゃんと変換してくれるらしい。
画像は、変換後のhtmlをSafariで表示させたもの。ざっと見たところ、波ダッシュ、丸数字、ローマ数字とかも含め、完璧っぽい。