皆さんmetaタグやHTTPヘッダでちゃんとcharset指定していますか?そうでなくとも今時SJISは使わない?はい。
ところが世の中には全くcharsetが指定されていない古いサイトとか、html要素よりも先に広告を挿入してhead要素を潰してくる無料レンサバとかが存在します。それでも自動認識が頑張ってくれたりしますが、文字化けすることもあります。iOSのSafariとか。
エンコーディングを手動で設定しようにも、iOSのSafariにはその機能がありません。以前は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)