如何用JavaScript在textarea中正确显示Word文件内容?
嘿,我来帮你搞定这个问题!
问题出在哪?
你现在用readAsText()读取Word文件的思路本身就有问题——Word文件(不管是.doc还是.docx)根本不是纯文本格式:
.docx本质是个ZIP压缩包,里面装的是一堆XML文件、媒体资源等,不是直接可读取的文本;.doc是微软的旧二进制格式,内部结构复杂得很,完全和纯文本不搭边。
所以用readAsText()读取出来的自然是一堆乱码的二进制字符,显示肯定异常。
怎么解决?用专业工具解析Word内容
推荐用mammoth.js这个轻量库,它专门用来解析.docx文件,能轻松提取出里面的纯文本内容。下面是修改后的完整代码示例:
首先,先引入mammoth.js(用CDN最方便):
<script src="https://unpkg.com/mammoth@1.6.0/mammoth.browser.min.js"></script>
然后修改你的上传函数:
vm.uploadDoc = function () { var file = document.getElementById("docFile").files[0]; // 先判断文件格式,优先处理docx(doc格式前端难解析) if (file.name.endsWith(".docx")) { var fileReader = new FileReader(); fileReader.onload = function(fileLoadedEvent){ // 这里要读取成ArrayBuffer,因为docx是二进制压缩包 var arrayBuffer = fileLoadedEvent.target.result; // 用mammoth提取纯文本 mammoth.extractRawText({arrayBuffer: arrayBuffer}) .then(function(result){ // 拿到解析后的纯文本,赋值给textarea document.getElementById("inputTextToSave").value = result.value; // 如果有解析警告,可以在控制台查看 var messages = result.messages; messages.forEach(function(message) { console.log(`${message.type}: ${message.message}`); }); }) .catch(function(error){ console.error("解析Word文件出错啦:", error); }); }; // 注意这里调用的是readAsArrayBuffer,不是readAsText! fileReader.readAsArrayBuffer(file); } else { alert("目前只支持上传.docx格式的Word文件哦~"); } };
额外说明
- 如果必须支持
.doc格式,前端几乎没有轻量的解决方案,因为旧.doc的格式没有公开的简单解析逻辑,通常得靠后端工具(比如Apache POI、python-docx2txt)来处理:前端把文件传给后端,后端解析后返回文本内容,前端再显示。 - 要是你不想引入外部库,也可以手动解压
.docx(毕竟是ZIP包),然后读取里面的word/document.xml文件,再自己解析XML提取文本——但这种方式要写不少XML解析代码,远不如用mammoth.js省心。
内容的提问来源于stack exchange,提问作者Pooja




