2014-10-09 33 views
1

我想DOCX文檔轉換爲HTML,但我不能讓編碼工作做好。 OutputStream包含XML頭,聲明內容使用UTF-8編碼,但不是語言特定的標誌(如:ąśćźż)我得到一些垃圾。這裏是我的代碼轉換器:Docx4j:charset編碼的HTML輸出

public class DocumentProcessor extends DocumentProcessorInterface { 
private WordprocessingMLPackage load; 
private HTMLSettings htmlSettings; 
private Http.MultipartFormData.FilePart filePart; 

public DocumentProcessor(Http.MultipartFormData.FilePart filePart) { 
    super(filePart); 
    this.filePart = filePart; 
} 

private void prepare() { 
    try { 
     load = Docx4J.load(filePart.getFile()); 
     htmlSettings = Docx4J.createHTMLSettings(); 
     htmlSettings.setImageHandler(new DataUrlImageHandler()); 
     htmlSettings.setWmlPackage(load); 
    } catch (Docx4JException e) { 
     e.printStackTrace(); 
    } 
} 

@Override 
public String getHTML() { 
    prepare(); 
    OutputStream outputStream = new ByteArrayOutputStream(); 
    Logger.info("Converting"); 
    try { 
     Docx4J.toHTML(htmlSettings, outputStream, Docx4J.FLAG_EXPORT_PREFER_XSL); 
    } catch (Docx4JException e) { 
     e.printStackTrace(); 
    } 
    Logger.info("Converted"); 
    return outputStream.toString(); 
} 

}

輸出看起來是這樣的:http://imgur.com/0sTTIe6我已經檢查數據庫編碼本身。 我錯過了什麼?

+1

相反outputStream.toString的(),指定編碼? – JasonPlutext 2014-10-09 19:37:27

回答

2

作爲@JasonPlutext建議,我應該創建新的字符串並將編碼設置爲UTF-8。

return new String(outputStream.toByteArray(), "UTF-8"); 

這就是我的問題的答案。

+0

你能分享String()方法嗎? – 2016-03-01 09:40:57

+0

@SomnathKadam它只是普通的java.lang.String。看到這個construtor:https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#String(byte[],%20java.nio.charset.Charset) – Mateusz 2016-03-02 12:28:36