Office Open XML中的默认编码为UTF-8
。所以Unicode已经成为可能。不过微软定义了:
ECMA-376 Part 1 22.4 Variant Types 22.4.2.4 bstr (Basic String):
22.4.2.4 bstr(基本字符串)
此元素定义二进制基本字符串变体类型,它可以存储任何有效的Unicode字符。无法在XML中直接表示的Unicode字符 由XML 1.0规范定义,应使用 Unicode数字字符表示转义字符格式
_xHHHH_
,其中H表示字符值中的十六进制字符。 [示例:XML中不允许使用Unicode字符8 1.0文档,因此它应作为_x0008_
进行转义。结束示例]要存储转义序列的文字形式,初始下划线应为 本身被转义(即存储为_x005F_
)。 [例子:字符串 文字_x0008_
将存储为_x005F_x0008_
。结束例子]在 此元素的可能值由W3C XML Schema定义 字符串数据类型。
这扩展了W3C XML Schema字符串数据类型。因此,字符序列_xHHHH_
确实具有特殊含义,如&#xHHHH;
之类的实体。这意味着每个需要解析Office Open XML(*.xlsx
,*.docx
,*.pptx
)的人在解析时都必须牢记这一点。例如,如果您将"Text _x1234_ text"
放入Excel
单元格,则Excel
会将此作为"Text _x005F_x1234_ text"
存储在XML中。因此,存储在文件中的字符串与输入的字符串不同,也与Excel
将在单元格中显示的字符串不同。例如,如果您将"Text _x1234_ text"
作为字符串单元格内容添加到XML中,则Excel
会在单元格中显示"Text ሴ text"
。
请参阅:XSSFCell in Apache POI encodes certain character sequences as unicode character
我很清楚XML 1.0确实有一些不能直接用XML表示的字符。但这是控制字符,而XML的其他用户能够在没有这些扩展的情况下实现限制。如果需要具有控制字符的内容,则它们使用其他正确定义的编码(例如Base64)。
所以我总是在字符串中寻找这个_xHHHH_
的有用用例。
问题:
有人可以向我说明为什么Office Open XML中的这种特殊的Unicode数字字符表示转义字符格式_xHHHH_
是必要的吗?
有人可以在字符串中为此_xHHHH_
提供任何有用的用例吗?
答案 0 :(得分:1)
作为一个用例,我们的所有数据库都是隔离的,我们需要在不同的数据库上测试一些作业/ crons / webservices,现在我们需要在excel中导出一些数据并将其作为输入文件提供给作业让另一个数据库检查它是否按预期工作。由于某些权限限制,因此我们的架构是必需的。
希望对您有用:)