zoukankan      html  css  js  c++  java
  • JavaScript判断文件是否为UTF-8编码

    function readFileToString(code) {
          const reader = new FileReader();
          reader.onload = function() {
            console.log(this.result);
            let str = this.result
            var v8 = new Uint8Array(this.result);
            //if("gbk"===code){
              str = iconv.decode(v8,code) 
           // } 
            
          };
          reader.onerror = e => {
            reject(e);
          };
          reader.readAsArrayBuffer(file);
        }
        (function() {
          const reader = new FileReader();
          reader.onload = function() {
            var v8 = new Uint8Array(this.result);
            if(isUTF8(v8)){
              readFileToString("utf-8")
            }else{
              readFileToString("gbk")
            }
          };
          reader.onerror = e => {
            reject(e);
          };
          reader.readAsArrayBuffer(file);
        })();
    function isUTF8(bytes) {
      var i = 0;
      while (i < bytes.length) {
          if ((// ASCII
              bytes[i] == 0x09 ||
              bytes[i] == 0x0A ||
              bytes[i] == 0x0D ||
              (0x20 <= bytes[i] && bytes[i] <= 0x7E)
          )
          ) {
              i += 1;
              continue;
          }
    
          if ((// non-overlong 2-byte
              (0xC2 <= bytes[i] && bytes[i] <= 0xDF) &&
              (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xBF)
          )
          ) {
              i += 2;
              continue;
          }
    
          if ((// excluding overlongs
              bytes[i] == 0xE0 &&
              (0xA0 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
              (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF)
          ) ||
              (// straight 3-byte
                  ((0xE1 <= bytes[i] && bytes[i] <= 0xEC) ||
                      bytes[i] == 0xEE ||
                      bytes[i] == 0xEF) &&
                  (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
                  (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF)
              ) ||
              (// excluding surrogates
                  bytes[i] == 0xED &&
                  (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0x9F) &&
                  (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF)
              )
          ) {
              i += 3;
              continue;
          }
    
          if ((// planes 1-3
              bytes[i] == 0xF0 &&
              (0x90 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
              (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
              (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
          ) ||
              (// planes 4-15
                  (0xF1 <= bytes[i] && bytes[i] <= 0xF3) &&
                  (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0xBF) &&
                  (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
                  (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
              ) ||
              (// plane 16
                  bytes[i] == 0xF4 &&
                  (0x80 <= bytes[i + 1] && bytes[i + 1] <= 0x8F) &&
                  (0x80 <= bytes[i + 2] && bytes[i + 2] <= 0xBF) &&
                  (0x80 <= bytes[i + 3] && bytes[i + 3] <= 0xBF)
              )
          ) {
              i += 4;
              continue;
          }
          return false;
      }
      return true;
    }

     转自:is-utf8/is-utf8.js at master · wayfind/is-utf8 (github.com)

  • 相关阅读:
    [LeetCode]*124.Binary Tree Maximum Path Sum
    HDU3336-Count the string(KMP)
    各种配置环境变量总结
    数据结构与算法-为什么要使用算法
    request 对象
    Codeforces 15B Laser
    使用jq工具在Shell命令行处理JSON数据
    Android中的FrameLayout帧布局
    iOS 8 设置导航栏的背景颜色和背景图片
    Creating HTML table with vertically oriented text as table header 表头文字方向
  • 原文地址:https://www.cnblogs.com/Leechg/p/14098473.html
Copyright © 2011-2022 走看看