使用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
相关产品推荐
相关产品推荐

