&#ユニコード数値表記からUTF-8へ変換 -- unisharphtml2utf8


freemind で HTML を出力したら漢字が全部 &#ユニコード数値;で出て来ちゃってその後の編集に不便だったんでこれをUTF-8に変換するプログラムを書きました。クイックハックなんで気取らずに perl です。
配布条件はGPLにしますので、 これを流用する場合は自主開発部分もソースコードを公開してください。
このとき書いたマインドマップは DJ選曲セミナー
使い方

$ unisharphtml2utf8 (file)...

要は普通にフィルタです。オプションはありません。文字コード指定タグの類は付かないのでブラウザでエンコーディングを指定するとか <meta http-equiv=content-type content="text/html;charset=utf-8"> を書き加えるとかしてください。

 

unisharphtml2utf8.txt ダウンロードしやすいようにファイル名の後ろに「.txt」をくっつけたんで、リネームして使ってください。chmod +x unisharphtml2utf8 して実行可にします。

unisharphtml2utf8
2005-12-05
作った。



#!/usr/bin/perl
#unisharphtml2utf8 -- 2005/12/05 by i16

#rfc2279 which is obsolete but wide span than newer rfc (rfc2279 xlat ucs4)

while(<>) {
	do {
		if(s/^\&\#(\d+)\;//) {
			$c=$1;
			if($c < 0) {
				print "&#$1;";
				}
			elsif($c <= 0x7f) {
				print chr($c);
				}
			elsif($c <= 0x7ff) {
				print chr(0xc0 | ($c >> 6));
				print chr(0x80 | ($c & 0x3f));
				}
			elsif($c <= 0xffff) {
				print chr(0xe0 | ($c >> 12));
				print chr(0x80 | (($c >> 6) & 0x3f));
				print chr(0x80 | ($c & 0x3f));
				}
			elsif($c <= 0x1fffff) {
				print chr(0xf0 | ($c >> 18));
				print chr(0x80 | (($c >> 12) & 0x3f));
				print chr(0x80 | (($c >> 6) & 0x3f));
				print chr(0x80 | ($c & 0x3f));
				}
			elsif($c <= 0x3ffffff) {
				print chr(0xf8 | ($c >> 24));
				print chr(0x80 | (($c >> 18) & 0x3f));
				print chr(0x80 | (($c >> 12) & 0x3f));
				print chr(0x80 | (($c >> 6) & 0x3f));
				print chr(0x80 | ($c & 0x3f));
				}
			elsif($c <= 0x7fffffff) {
				print chr(0xfc | ($c >> 30));
				print chr(0x80 | (($c >> 24) & 0x3f));
				print chr(0x80 | (($c >> 18) & 0x3f));
				print chr(0x80 | (($c >> 12) & 0x3f));
				print chr(0x80 | (($c >> 6) & 0x3f));
				print chr(0x80 | ($c & 0x3f));
				}
			else {
				print "&#$1;";
				}
			}
		else {
			print $1 if s/^(.)//;
			}
		} until(/^$/);
	print "\n";
	}


unisharphtml2utf8


i16(愛一郎)