現在のドキュメントを文字コード自動判定で読み直す Fork

  • /*
     * @title 現在のドキュメントを文字コード自動判定で読み直す
     * @include http://*
     * @license MIT License
     * @javascript_url
     */
    (function(){
    const xhr = new XMLHttpRequest();
    xhr.open("GET", location.href);
    xhr.responseType = "blob";
    xhr.onload = function() {
      const reader = new FileReader();
      reader.onload = function() {
        
        // 簡易文字コード検出(このbookmarkletの用途的にUTF-8は考慮してない)
        // http://unarist.hatenablog.com/entry/2017/02/28/205401
        const enc = (function(bytes) {
          // let->var はiOS9対策
          /*let*/var cnt = 0;
          for (/*let*/var i = 0; i < bytes.length - 1 && cnt < 50; ++i) {
            const b = bytes[i];
            
            if (b == 0x1B) return "iso-2022-jp";
            if (b < 0x81) continue;
            
            ++cnt;
            if (b < 0xA0) {
              if ((b == 0x8E || b == 0x8F) && bytes[i + 1] >= 0xA1) {
                ++i;
              } else {
                return "shift-jis";
              }
            } else if (b >= 0xE0) {
              ++i;
            }
          }
          return "euc-jp";
        })(new Uint8Array(reader.result));
        
        // TextDecoder使いたいですね... http://caniuse.com/#feat=textencoder
        reader.onload = function() {
          // document.writeだと(iOS9のSafariでは)タイトルが更新されなかった
          document.documentElement.innerHTML = reader.result;
        };
        reader.readAsText(xhr.response, enc);
      };
      reader.readAsArrayBuffer(xhr.response);
    };
    xhr.send();
    })()
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。