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声明中的编码 getDB2XmlStringISO-10646-UCS-2 getDB2XmlBytes(String targetEncoding)targetEncoding 指定的编码 getDB2XmlAsciiStreamUS-ASCII getDB2XmlCharacterStreamISO-10646-UCS-2 getDB2XmlBinaryStream(String targetEncoding)targetEncoding 指定的编码 对于指定了 INCLUDING XMLDECLARATION 的显式 XMLSERIALIZE 函数来说,数据库服务器将添加编码,并且 JDBC 驱动程序不会修改该编码。 数据库服务器添加的显式编码是 UTF-8 编码。 根据应用程序检索值时采用方式的不同,数据的实际编码可能与显式的内部编码不匹配。
- 如果应用程序将输出数据发送至 XML 解析器,那么应该使用 UTF-8、UCS-2 或 UTF-16 编码来在二进制应用程序变量中检索该数据。