我正在以 UTF-8 编码从 SSIS 输出一个文件。 此文件将传递给第三方以导入其系统。 他们在导入此文件时遇到问题。尽管他们要求 UTF-8 编码,但似乎他们将编码转换为 ISO-8859-1。 他们使用此命令转换文件编码:
iconv -f UTF-8 -t ISO-8859-1 dweyr.inp
他们收到此错误
illegal input sequence at position 11
导致此问题的文本片段是:
ark O’Dwy
我认为这是撇号,或者本文中使用的撇号的任何版本。 我面临的问题是,我尝试的每个文本编辑器都告诉我文件是 UTF-8 并正确呈现。 供应商说这个字符不是 UTF-8。
如何确认谁是正确的?
iconv 的错误消息有点误导,但有点正确。
它不会告诉您输入不是有效的 UTF-8,而是无法以无损方式转换为 ISO-8859-1。ISO-8859-1 无法对’
字符进行编码。
通过执行以下命令进行验证:
echo "ark O’Dwy" | iconv -f UTF-8 -t UTF-7
这将生成如下所示的输出"ark O+IBk-Dwy"
.
在这里,我输出到 UTF-7(一种很少使用的编码,在这里演示很有用,但除此之外别无他法(。
换句话说:编码只是"非法"的,因为它不能转换为ISO-8859-1,但它是一个完全有效的UTF-8序列。
如果第三方声称支持 UTF-8,那么他们可能只是非常肤浅地这样做。它们可能支持任何可以用 ISO-8859-1 编码的文本,只要它是用 UTF-8 编码的(这是"UTF-8 支持"的极低级别(。