注重: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 等信息库中的字符集属性,或者是通过嵌入标记实现(即编码声明)。