注重:Oracle XDK for C/C++ 提供一種非凡的模式,答應以任意的單字節字符編碼方式來創建 DOM 樹,而 API 以指定編碼方式工作。此特性用于優化目的,被看作是例外情況,因為其目的是用于那些已了解數據包含指定字符集中字符的情況。強烈建議您始終使用 xmlinitenc 初始化函數或將 data_encoding 屬性指定給 XML 上下文。 使用規定編碼方式是一種最佳應用,因為您不必關注文檔內或文檔本身的編碼信息 — 用戶始終了解編碼方式。因此減少了出錯機率并可以提高效率。
/* response is an http servlet response object */ response.setCharacterEncoding("UTF-8"); // set the output encoding to UTF-8 PRintWriter w = response.getWriter(); // get the output stream mandated to UTF-8 : /* doc is an instance of an XML */ doc.print(w); // the document printed in the specified encoding
InputSource is = new InputSource(); // create an input source is.setByteStream(request.getInputStream()); // set the input stream mandated to UTF-8 is.setEncoding("UTF-8"); // set the mandate encoding to the input source parser.parse(is); // the parser will parse in the specified encoding
// parse an input stream in UTF-8 with DOM XmlLoadDom(ctx, &err, "stream", in, "input_encoding", "UTF-8", NULL); // parse an input stream in UTF-8 with SAX XmlLoadSax(ctx, &err, "stream", in, "input_encoding", "UTF-8", NULL); // print the document in UTF-8 XmlSaveDom(ctx, &err, doc, "stream", out, "output_encoding", "UTF-8", NULL);
支持多種編碼方式 需要支持多種編碼方式的應用程序能夠支持 XML 處理器所支持的任何編碼方式。所有的 XML 處理器都支持 UTF-8 和 UTF-16。它們通常也支持一些常用的本地編碼方式。
雖然 Oracle XML 處理器支持所有常用編碼方式以及許多其他編碼方式,但建議僅在必要時答應多種編碼方式。應用程序不應該包含那些不使用 UTF-8 或 UTF-16 編碼方式的 XML 文檔,除非知道用戶支持該編碼方式并且其內容可以使用編碼方式表達。例如,假如數據庫字符集不是 Unicode,則不贊成在數據庫中包含 XML 文檔并在數據庫字符集中利用它為未知用戶提供服務。
為接收各種編碼方式的輸入實體,應該由 XML 處理器以字節流的形式不加更改地讀取輸入流。確保將外部提供的編碼信息(例如內容類型的 HTTP 標題中的 charset 參數)傳遞到 XML 處理器,以便在 XML 處理器分析輸入時強制為指定的編碼方式。這種情況就象指定的編碼方式就是規定編碼方式一樣。
為了以任意編碼方式生成輸出,需要確保實體帶有字符編碼信息,其方法是通過外部標記實現,如 HTTP 標題的 charset 參數以及 Oracle Files 或 Oracle XML DB 等信息庫中的字符集屬性,或者是通過嵌入標記實現(即編碼聲明)。