You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XDocReport转含UTF-8的.doc为HTML乱码,求编码设置方法

解决DOC转HTML时UTF-8字符乱码问题

你遇到的问题是因为XHTMLOptions确实没有setEncoding方法,编码控制需要通过输出流的字符编码设置来实现——默认情况下转换器会使用系统平台编码,导致UTF-8字符显示乱码。

修改代码如下,通过指定输出流的字符编码为UTF-8来解决乱码:

public static byte[] generateHTMLFromDoc(byte[] docBytes) {
    try(ByteArrayInputStream inputStream = new ByteArrayInputStream(docBytes);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        // 指定UTF-8编码包装输出流
        OutputStreamWriter writer = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)) {
        XWPFDocument document = new XWPFDocument(inputStream);
        XHTMLOptions options = XHTMLOptions.create();
        Base64ImageExtractor imageExtractor = new Base64ImageExtractor();
        options.setExtractor(imageExtractor);
        options.URIResolver(imageExtractor);
        // 使用Writer作为输出目标,而非直接用OutputStream
        XHTMLConverter.getInstance().convert(document, writer, options);
        writer.flush(); // 确保所有内容写入输出流
        return outputStream.toByteArray();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

关键修改说明

  • 用OutputStreamWriter包装ByteArrayOutputStream,并明确指定StandardCharsets.UTF_8编码,确保输出的HTML内容以UTF-8编码写入。
  • 调用convert方法时传入Writer对象,而非原始的OutputStream,这样转换器会遵循指定的编码处理字符。
  • 添加writer.flush()确保所有字符数据都被写入到底层的字节输出流中。

内容的提问来源于stack exchange,提问作者Pla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:55:09