创建jsp时如何默认生成的是utf-8(js判断文件是否为utf-8编码的方法)
类别:编程学习 浏览量:2273
时间:2022-01-24 00:46:32 创建jsp时如何默认生成的是utf-8
js判断文件是否为utf-8编码的方法常规方案使用FileReader以utf-8格式读取文件,根据文件内容是否包含乱码字符�,来判断文件是否为utf-8。
如果存在�,即文件编码非utf-8,反之为utf-8。
代码如下:
const isUtf8 = async (file: File) => { return await new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsText(file); reader.onloadend = (e: any): void => { const content = e.target.result; const encodingRight = content.indexOf("") === -1; if (encodingRight) { resolve(encodingRight); } else { reject(new Error("编码格式错误,请上传 UTF-8 格式文件")); } }; reader.onerror = () => { reject(new Error("文件内容读取失败,请检查文件是否损坏")); }; }); };
该方法问题在于,如果文件非常大,比如几个G,浏览器读到的内容直接放在内存中,fileReader实例会直接触发onerror,抛出错误,有时浏览器会直接崩溃。
大文件方案对于大文件,可以对文件内容进行抽样,对文件进行切片,这里使用100片。对切出的每片文件再切取前面1kb大小的片段,以string方式读取。如果1024B可能正好切在某个汉字编码的中间,导致以string方式读取时出错,即首尾可能出现�,被认为是非utf-8片段。这时可以取1kb对应字符串的前半段,再去判断�是否存在。
上述常数可以根据需求进行调整。
代码如下:
const getSamples = (file: File) => { const filesize = file.size; const parts: Blob[] = []; if (filesize < 50 * 1024 * 1024) { parts.push(file); } else { let total = 100; const sampleSize = 1024 * 1024; const chunkSize = Math.floor(filesize / total); let start = 0; let end = sampleSize; while (total > 1) { parts.push(file.slice(start, end)); start += chunkSize; end += chunkSize; total--; } } return parts; }; const isUtf8 = (filePart: Blob) => { return new Promise((resolve, reject) => { const fileReader = new FileReader(); fileReader.readAsText(filePart); fileReader.onload = (e) => { const str = e.target?.result as string; // 大致取一半 const sampleStr = str?.slice(4, 4 + str?.length / 2); if (sampleStr.indexOf("�") === -1) { resolve(void 0); } else { reject(new Error(编码格式错误,请上传 UTF-8 格式文件")); } }; fileReader.onerror = () => { reject(new Error(文件内容读取失败,请检查文件是否损坏")); }; }); }; export default async function (file: File) { const samples = getSamples(file); let res = true; for (const filePart of samples) { try { await isUtf8(filePart); } catch (error) { res = false; break; } } return res; }
到此这篇关于js判断文件是否为utf-8编码的方法的文章就介绍到这了,更多相关js判断utf-8内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- pjs计算方式(JS代码编译器Monaco使用方法)
- php多维数组怎么转换json(php实现的数组转xml案例分析)
- nodejs启动web服务器(使用NODE.JS创建一个WEBSERVER服务器的步骤)
- vue引用js库报错(Vue插件报错:Vue.js is detected on this page.问题解决)
- js项目经验(JS实现扫雷项目总结)
- js手写数组去重(JS对象数组去重的3种方法示例及对比)
- js柯里函数的应用场景(深入详解JS函数的柯里化)
- js实现自动轮播(原生js封装无缝轮播功能)
- js编写简单网页计算器(js实现网页计算器)
- js字符串加密解密
- mysqljson字段查询(Mysql 查询JSON结果的相关函数汇总)
- extjs中treepanel例子
- ASP.NET中使用CodeDomProvider调用js文件中的js方法
- js setTimeout
- 用js编写tab栏切换(JavaScript实现简易tab栏切换内容栏)
- nodejssocket文件传输(node+socket实现简易聊天室功能)
- 这竟然是捏出来的 20种橡皮泥玩法让你轻松hold住魔娃(这竟然是捏出来的)
- 自制橡皮泥(自制橡皮泥)
- 还在卖 禁药西布曲明网上论斤卖(还在卖禁药西布曲明网上论斤卖)
- 微商在朋友圈热卖的 DL减肥咖啡 含违禁药物,你还敢买吗(微商在朋友圈热卖的)
- 八一节,说说中国女兵(八一节说说中国女兵)
- 王治郅菜鸟赛季已让八一带入正轨,大郅七大经典语录或是成功秘诀(王治郅菜鸟赛季已让八一带入正轨)
热门推荐
- vue前端打包发布教程(Vue项目打包、合并及压缩优化网页响应速度)
- 云服务器和物理服务器有什么区别(云服务器是什么?云服务器有什么优势?)
- 服务器宝塔面板使用教程(宝塔服务器管理助手Linux面板使用教程)
- div中设置图片的大小(div或img图片高度随宽度自适应的方法)
- css3三维模型(CSS3系列之3D制作方法案例)
- websocket聊天室怎么设置(基于websocket实现简单聊天室对话)
- vue原样表格导出excel(Vue导出Excel功能的全过程记录)
- nginx跳转规则配置上下文(基于nginx实现上游服务器动态自动上下线无需reload的实现方法)
- vmware 安装失败(安装使用Vmware出现的问题及解决方法)
- vue router用法(如何在Vue 3中扩展Vue Router链接详解)