読者です 読者をやめる 読者になる 読者になる

うならぼ

どうも。

現在のページをSJISで読み込みなおすブックマークレット

皆さんmetaタグやHTTPヘッダでちゃんとcharset指定していますか?そうでなくとも今時SJISは使わない?はい。

ところが世の中には全くcharsetが指定されていない古いサイトとか、html要素よりも先に広告を挿入してhead要素を潰してくる無料レンサバとかが存在します。それでも自動認識が頑張ってくれたりしますが、文字化けすることもあります。iOSSafariとか。

エンコーディングを手動で設定しようにも、iOSSafariにはその機能がありません。以前はChromeアプリにありましたが、最近のアップデートでそれも消えてしまいました。

のでこちら。

var xhr = new XMLHttpRequest();
xhr.open('GET', location.href);
xhr.responseType = 'blob';
xhr.onload = function() {
  var reader = new FileReader();
  reader.onload = function() { document.write(reader.result); };
  reader.readAsText(xhr.response, "Shift_JIS");
};
xhr.send();

外部ライブラリでエンコーディング変換しようか、正しいエンコーディングでiframeに読み込んでinnerHTMLを取得とか、なんて考えていたんですけどね。もっとあっさりできました。

これをブックマークレット化。

javascript:(function(a,b){a.open("GET",location.href);a.responseType="blob";a.onload=function(){b.onload=function(){document.write(b.result)};b.readAsText(a.response,"Shift_JIS")};a.send()})(new XMLHttpRequest,new FileReader)