【问题标题】:Strange interaction between jdom and ssisjdom和ssis之间奇怪的交互
【发布时间】:2011-10-07 17:48:06
【问题描述】:

我为这篇长文道歉,但这个问题并不容易说明。

我最近写了一段 Java 来为同事重新配置一些 SSIS 包,使用 jdom 来解析和操作 XML。该程序有效,但生成的文件崩溃了。我们能够将崩溃追溯到原始文件中的一个奇怪的大部分非打印字符,该字符在 jdom 编写的文件中没有重现。

这个角色的奇怪之处在于它并没有出现在所有编辑器中。例如,Oxygen XML 编辑器甚至看不到它。但是,在记事本中,原始版权声明是这样的:

<DTS:Property DTS:Name="TaskContact">Execute SQL Task; Microsoft Corporation; Microsoft 
SQL Server v9; © 2004 Microsoft Corporation; All Rights     
Reserved;http://www.microsoft.com/sql/support/default.asp;1</DTS:Property>

和同一元素的转换版本:

<DTS:Property DTS:Name="TaskContact">Execute SQL Task; Microsoft Corporation; Microsoft 
SQL Server v9; © 2004 Microsoft Corporation; All Rights 
Reserved;http://www.microsoft.com/sql/support/default.asp;1</DTS:Property>

(问题字符是版权符号前面的 Â)

在有问题的包上运行全局替换,其中 Â -> "" 和 © -> "(c)" 使问题消失了,但现在事实证明,当放置未修改的元素时问题又回来了进入修改后的包,所以现在我不确定问题的根源是什么。

再次,我很抱歉这篇长文,但我不想遗漏任何细节。任何见解或建议将不胜感激;我很困惑。

我的同事会在尝试加载这些内容时向我发送错误消息,如果它们有用,我可以发布它们。

【问题讨论】:

  • 你通过 jdom 在 SSIS 中重新配置了什么?
  • 我正在为数据仓库重新调整一堆 dtsx 包,帮助 DB 团队清理。具体来说,规范化一些元素名称并插入缺失的元素,其组成可以通过编程方式确定。
  • 啊,我本来打算建议看看PacMan,但听起来你已经熟悉对象模型了。

标签: jdom ssis


【解决方案1】:

至于问题的根源:以一种编码写入并读取另一种编码。请参阅我对这个问题的回答。 £ becomes £ Why? XML ISO encoding issue? 只需将井号 £ 替换为版权符号 © (unicode U+00A9)。希望您能找到发生编码混淆的地方。

【讨论】:

  • 谢谢。我在搜索时找到了那个答案,虽然它没有让我整理好,但它帮助我找到了更好的地方。与此同时,我制作了一个 FileReader 并调用了它的 getEncoding() 方法,它说“Cp1252”。我将我的 XMLFormatter 的输出编码设置为该值,字符似乎正确显示,但 JDOM 无法读取生成的文件。因为我有一个两阶段的过程,所以这是一个问题。我已经合并了各个阶段,我希望有一份关于它是否有效的报告,并将发布结果。
  • @JonKiparsky。使用 FileReader 可能是问题所在。阅读器的编码可能与内容的“真实”编码不匹配,这在本案中得到了证据的支持。我总是推荐使用字节流而不是字符流。
  • 感谢您的提示。我试试看。
猜你喜欢
  • 2015-12-24
  • 2015-07-30
  • 2016-12-13
  • 2019-05-25
  • 1970-01-01
  • 2020-05-20
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多