JDBC 和SQLJ应用程序中的XML数据编码

一般来说,Java™应用程序比 Db2 ODBC 或嵌入式SQL应用程序更少XML编码问题,因为应用程序代码页始终是Unicode。

虽然所有应用程序对内部编码的XML数据的编码考虑因素都是相同的,但对于Java应用程序中的外部编码数据,情况则简单得多。

在Java应用程序中输入XML数据的一般建议

  • 如果输入数据在文件中,请以二进制流(setBinaryStream)方式读取该数据,以便数据库管理器进程将其作为内部编码的数据来进行处理。
  • 如果输入数据位于 Java 应用程序变量中,则您选择的应用程序变量类型将决定 Db2 数据库管理器是否使用任何内部编码。 如果您以字符类型输入数据(例如, setString ),数据库管理器会在解析和存储数据前将其从 UTF-16 (应用程序代码页)转换为 UTF-8。

Java应用程序中XML数据输出的常规建议

  • 如果将 XML 数据作为非二进制数据输出到文件中,那么应该对输出数据添加 XML 内部编码。

    文件系统的编码可能不是 Unicode,因此,在将字符串数据存储到文件时可能会对其执行转换。 如果将数据作为二进制数据写入文件,那么不会执行转换。

    对于Java应用程序,数据库服务器不会为隐式XML序列化操作添加显式声明。 如果对输出数据进行类型转换以将其转换为 com.ibm.db2.jcc.DB2Xml,并且调用其中一个 getDB2Xmlxxx 方法,JDBC 驱动程序就会添加编码声明,如下表所示。

    getDB2Xmlxxx 声明中的编码
    getDB2XmlString ISO-10646-UCS-2
    getDB2XmlBytes(String targetEncoding) targetEncoding 指定的编码
    getDB2XmlAsciiStream US-ASCII
    getDB2XmlCharacterStream ISO-10646-UCS-2
    getDB2XmlBinaryStream(String targetEncoding) targetEncoding 指定的编码

    对于指定了 INCLUDING XMLDECLARATION 的显式 XMLSERIALIZE 函数来说,数据库服务器将添加编码,并且 JDBC 驱动程序不会修改该编码。 数据库服务器添加的显式编码是 UTF-8 编码。 根据应用程序检索值时采用方式的不同,数据的实际编码可能与显式的内部编码不匹配。

  • 如果应用程序将输出数据发送至 XML 解析器,那么应该使用 UTF-8、UCS-2 或 UTF-16 编码来在二进制应用程序变量中检索该数据。