2015-05-04 63 views
2

我們試圖通過JAVA API向MarkLogic插入ISO編碼的xml,但得到此錯誤。 XML包含特殊字符,例如:註冊商標標誌 - <H4>®</H4 >無法通過JAVA API向Marklogic編寫xml和ISO編碼

Bad Request. Server Message: XDMP-DOCUTF8SEQ: Invalid UTF-8 escape sequence at line 14145 -- document is not UTF-8 encoded. 

代碼:

DatabaseClient client = DatabaseClientFactory.newClient(IP, PORT, 
       DATABASE_NAME, USERNAME, PWD, Authentication.DIGEST); 
      // acquire the content 
      InputStream xmlDocStream = XMLController.class.getClassLoader() 
        .getResourceAsStream("path to xml file"); 

      // create a manager for XML documents 
      XMLDocumentManager xmlDocMgr = client.newXMLDocumentManager(); 

      // create a handle on the content 
      InputStreamHandle xmlhandle = new InputStreamHandle(xmlDocStream); 

      // write the document content 
      xmlDocMgr.write("/" + filename, xmlhandle); 
+1

和代碼是...? – fge

+0

如果我們使用mlcp(marklogic content pump)加載這個xml,我們會得到相同的錯誤 –

+0

是的,代碼是...? – fge

回答

2

Sravan:

的解決方法是指定當前通過在InputStreamReader中封裝輸入流來讀取資源時的ISO編碼:

http://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html#InputStreamReader-java.io.InputStream-java.lang.String-

當Java API知道內容具有不同的編碼,但在其他情況下假定內容已經是UTF-8時,它將轉換爲UTF-8。有關編碼轉換的詳細細節,請參見:

http://docs.marklogic.com/guide/java/document-operations#id_11208

希望幫助,

+0

我嘗試使用XMLEventReaderHandle和XMLStreamReaderHandle。這對於UTF-8編碼的xml文件工作正常,即插入和檢索都成功(這裏Marklogic正在將特殊字符轉換爲其他形式,並在檢索它時顯示正確的形式),但是當我嘗試過xml ISO編碼,我可以插入但無法檢索文件中的特殊字符。 –

+0

MarkLogic始終將JSON,文本和XML文檔存儲爲UTF-8。如果應用程序或工具需要使用其他編碼(例如ISO-8859-1)讀取文檔,則可以使用InputStreamHandle在文檔上打開InputStream,然後用Reader(或其他讀取API)打包它,以指定charset爲所需的編碼。 – ehennum