确认文件的编码

Confirming the encoding of a file

我正在以 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(一种很少使用的编码,对这里的演示很有用,但除此之外别无他用)。

换句话说:编码只是 "illegal",因为它不能转换为 ISO-8859-1,但它是一个完全有效的 UTF-8 序列。

如果第三方声称支持 UTF-8,那么他们可能只是表面上这样做。他们 可能 支持任何可以用 ISO-8859-1 编码的文本,只要它是用 UTF-8 编码的(这是 "UTF-8 support" 的极低级别)。