美文网首页
javascript判断上传文件的编码

javascript判断上传文件的编码

作者: xiabenglakaA | 来源:发表于2020-04-16 18:06 被阅读0次

原文出处请看这里解析.csv文件乱码解决

        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;
        }
        $('input[type=file]').change(function(event){
            var files = event.target.files;
            var encoding = '';
            if(!files || !files.length){
                return; //未选择文件
            }

            var file = files[0];
            var reader = new FileReader();
            reader.onload = function (e) {
                var data = e.target.result;
                data = new Uint8Array(data);
                encoding = isUTF8(data) ? 'UTF8' : 'GBK'; //这里只做了判断是否是UTF8判断,如果不是,就假定是GBK,没做其它编码的处理。
                console.log(encoding);
            }
            reader.readAsArrayBuffer(file);
        })

相关文章

网友评论

      本文标题:javascript判断上传文件的编码

      本文链接:https://www.haomeiwen.com/subject/uoydvhtx.html