gpt4 book ai didi

java - DB2 UTF-8 XML C2 85 到换行符转换

转载 作者:行者123 更新时间:2023-12-01 09:48:58 25 4
gpt4 key购买 nike

在表中保存编码为 DB2 9.7 LUW 的 XML 数据 (UTF-8) 时遇到问题。

表DDL:

CREATE TABLE DB2ADMIN.TABLE_FOR_XML
(
ID INTEGER NOT NULL,
XML_FIELD XML NOT NULL
)

在一些罕见的 Unicode 字符的罕见示例中会出现问题,我们使用的是 java jdbc db2 驱动程序。

例如,在正常模式下的编辑器中而不是在十六进制 View (Notepad++)中查看下面这个奇怪的 A(16 之后)在黑色方 block 中表示为 NEL

输入 XML 采用 UTF-8 编码,在十六进制编辑器中查看时具有以下值:

00000010h: 31 36 2E 20 C2 85 42                            ; 16. Â…B

在 DB2 中插入后,我认为发生了某种转换,因为当选择数据时,现在相同的字符是

00000010h: 31 36 2E 20 0D 0A 42                            ; 16. ..B

C2 85 被转换为 0D 0A,即新行。

我注意到的另一件事是,虽然将 XML 保存到表头内容时以 <xml version="1.0" encoding="UTF-8">

但是从 db2 获取 xml 后内容开始于

<xml version="1.0" encoding="UTF-16">

有没有办法强制 db2 以 UTF-8 格式存储 XML 而不进行转换?使用 XMLSERIALIZE 获取没有帮助

从 DB2ADMIN.TABLE_FOR_XML 选择 XML_FIELD AS CONTENT1、XMLSERIALIZE(XML_FIELD as cLOB(1M)) AS CONTENT2

IN content2 中没有 XML header ,但有 stile newLine 。

最佳答案

此行为是 XML 1.1 处理器的标准行为。 XML 1.1 s2.11 :

the XML processor must behave as if it normalized all line breaks in external parsed entities (including the document entity) on input, before parsing, by translating [the single character #x85] to a single #xA character

行结束类型是文档的众多细节之一,这些细节将在解析和序列化周期中丢失(例如属性顺序、标签中的空格、数字字符引用...)。

DB2 的 XML 字段使用 XML 1.1 有点令人惊讶,因为很少使用该 XML 修订版,但也并不令人意外,因为只有 IBM 才想要支持 NEL(古老的、无用的大型机行结束字符)。

Is there way to force db2 to store XML in UTF-8 without conversions ?

使用 BLOB?

如果您需要 native XML 字段功能来保留文档的确切原始序列化形式,那么您将需要两列。

(您确定需要保留 NEL 行结尾吗?通常没有人关心行结尾,而这些都是非常假的。)

关于java - DB2 UTF-8 XML C2 85 到换行符转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37744653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com