我在数据库中存储了“单位分隔符”0x1F。
我想要的只是使用 MSXML6.dll 将单位分隔符导出为 XML 1.0 格式。
以下是我的痛点:
将 0x1F 直接写入 XML 文件,错误消息,属性以空字符串结尾。
替换为 HTML Entity "&#x 1 F;",然后写入 XML 文件,结果是:"&#x 1 F;",令人失望。
如果我手动更改 XML 文件以替换“& amp ; # x 1 F ;” 到“& # x 1 F ;”,XML 解析器失败,出现异常“无效的 Unicode 字符”。
问题: 那么,如果我不能使用 XML 1.1,将“单位分隔符”写入 XML 文件并可以导入的最佳解决方案是什么?
注意:一种可能的解决方案是将“单位分隔符”替换为一些奇怪的字符串,例如“ $ ”。但这真的是个好名字吗?如果我使用“0x1F”或“#x1F”或“#x1F;”,你有什么看法?而不是“”?哪个更好或更好的候选人?
概括:
打个比方:让我们想想编译器是如何工作的,有两个阶段:“预编译”和“编译”。
对于 XML 文件生成,它的作用类似于“编译”阶段。例如将“<”转换为“& lt;”
但是,XML 1.0 不支持单元分隔符,因此“编译”阶段不会将其转换为 HTML 实体“&#x 1 F;”
所以我们必须在“预编译”阶段寻求解决方案,这是我们自己的应用程序的责任。
写作时:
Option1: <unit>aaa</unit><unit>bbb</unit>
Option2: simply use "_x241F_" to replace "\37" in the string if "_x241F_" is not conflicting with any existing token in the string.
阅读时:
According to Option1: Load the elements, catenate to a single string with "\37" as separator.
According to Option2: simply use "\37" to replace "_x241F_".
我还发现 MSXML(即使是最高版本的 MSXML6.dll)也不会加载 XML 1.1 。
因此,如果不幸地使用 MSXML,我们必须在输入“编译”阶段之前编写自己的“预编译”代码来处理 Unicode 字符。
注意:我从这里借用了“_ x 2 4 1F _”的想法。感谢大家的帮助