【问题标题】:SSIS load XML Invalid character in the given encodingSSIS在给定编码中加载XML无效字符
【发布时间】:2019-08-12 13:43:36
【问题描述】:

我正在使用 SQL Server 2014\SSIS。

我有一个 C# 脚本任务,它从一直在工作的第 3 方 XML 文件加载 XML 数据。最近它一直没有说明:

Invalid character in the given encoding. Line 201, position 169.

使用断点,以下 C# 行是生成错误的时间:

XMLDataset.ReadXml(XMLFileNameWithPath);

fyi - XMLFileNameWithPath 是我将 XML 文件名传递给的局部变量。

当我在 Notepadd++ 中打开 XML 文件并转到第 201 行\位置 169 时,字符“ñ”似乎是罪魁祸首。

XML 的第一行声明它是 UTF 8:

<?xml version="1.0" encoding="UTF-8"?>

【问题讨论】:

  • 这篇文章似乎建议你用unicode替换字符。 support.crossref.org/hc/en-us/articles/…。所以在转换成 XML 之前,先替换它。
  • SSIS 有 XML 源适配器。请试一试,而不是脚本任务/组件。
  • @YitzhakKhabinsky 我不能使用本机 SSIS XML 源 - XML 文件包含 50 个输出列,这意味着 50 个输出表,然后尝试找出如何加入它们。而且我不喜欢 Merge Join 组件 - 在数据流中 50 次
  • Michael,您可以阅读 encoding="UTF-8" 的事实并不意味着该文件确实是 utf-8 编码的。您可以尝试将声明带走(带有&lt;?xml blah blah?&gt; 的部分)并让系统决定。在智能编辑器(如记事本++)中打开文件以检查真实编码(并可能更改此编码)可能会有所帮助。
  • @Shnugo 如果我在 Notepadd ++ 中打开它确实声明它是 UTF-8。 XML 文件来自第 3 方 - 您是否建议在我加载之前对 XML 执行查找\替换?

标签: sql-server xml encoding ssis


【解决方案1】:

我添加了一个脚本任务来在加载之前对 XML 文件进行预处理,以将编码从 UTF-8 更改为 ISO-8859-1。现在加载,我不再收到编码错误。

信用应得的信用我正在使用此处详细说明的查找和替换 - 尽管它声明文本文件适用于 XML 文件:

SSIS - Script task: Replace TEXT in text file using VBscript with dynamic file path

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多