Youtubeで文字化けてるタイトルを元に戻す

JavaScriptでやってみた。convertに文字化けてる文字列を渡すと元に戻るかも。軽く作っただけだから多分間違いがいくつか。
なんとなくプログラミングしたい気分だった。試験前なのに何やってんだか。
(2007-02-12追記)id:sed:20070211:1171149947で既にあった。まあいいや。

function converUtf8(a) {
  var table = {
    8364:	128,
    65533:	129,
    8218:	130,
    402:	131,
    8222:	132,
    8230:	133,
    8224:	134,
    8225:	135,
    710:	136,
    8240:	137,
    352:	138,
    8249:	139,
    338:	140,
    65533:	141,
    381:	142,
    65533:	143,
    65533:	144,
    8216:	145,
    8217:	146,
    8220:	147,
    8221:	148,
    8226:	149,
    8211:	150,
    8212:	151,
    732:	152,
    8482:	153,
    353:	154,
    8250:	155,
    339:	156,
    65533:	157,
    382:	158,
    376:	159,
    32: 	160,
  };
  if (a[0] < 0xe0) return "?";
  if (a[0] > 0xff) return "?";
  for (var i = 1; i < 3; ++ i) {
    if (a[i] < 0x80 || a[i] > 0xff) {
      if (table[ a[i] ]) {
        a[i] = table[ a[i] ];
      } else return "?";
    }
  }
  a[0] &= 0x0f;
  a[1] &= 0x3f;
  a[2] &= 0x3f;
  return String.fromCharCode((a[0] << 12) | (a[1] << 6) | a[2]);
}

function convert(str) {
  var c = new Array();
  for (var i = 0; i < str.length; ++ i) {
    c[i] = str.charCodeAt(i);
  }
  var result = "";
  var a = new Array();
  for (var i = 0; i < c.length; ++ i) {
    if (c[i] < 0x80) {
      result += String.fromCharCode(c[i]);
    } else {
      a.push(c[i]);
      if (a[0] < 0xe0 && a.length == 2 || a[0] < 0xf0 && a.length == 3 ) {
        result += converUtf8(a);
        a = new Array();
      }
    }
  }
  return result;
}