如何在Azure Data Factory V1/V2中将带BOM的UTF-8编码文件转换为不带BOM的UTF-8编码文件?

4

我目前有一个V2数据工厂,可以将UTF-8编码且带BOM的文件复制到存储位置。作为标准复制操作的一部分,我希望删除BOM。

是否有方法可以做到这一点?

2个回答

1
原来,这其实非常简单。在输出数据集中,如果我们不指定编码,Data Factory将默认使用UTF-8而不添加BOM。
以下数据集说明了这个原则:
这是我的输入数据集:
{ "name": "InputBlobs", "properties": { "linkedServiceName": { "referenceName": "AzureStorageLinkedService", "type": "LinkedServiceReference" }, "type": "AzureBlob", "typeProperties": { "format": { "type": "TextFormat", "columnDelimiter": "|", "rowDelimiter": "", "nullValue": "\\N", "encodingName": "UTF-16", "treatEmptyAsNull": true, "skipLineCount": 0, "firstRowAsHeader": false }, "fileName": "", "folderPath": "folder_path" } }, "type": "Microsoft.DataFactory/factories/datasets" }
这是我的输出数据集:
{ "名称": "OutputBlobs", "属性": { "linkedServiceName": { "referenceName": "AzureStorageLinkedService", "type": "LinkedServiceReference" }, "类型": "AzureBlob", "类型属性": { "格式": { "类型": "TextFormat", "列分隔符": "|", "行分隔符": "", "空值": "\\N", "将空视为null": true, "跳过行数": 0, "第一行作为标题": false }, "文件名": "", "文件夹路径": "another_folder_path" } }, "类型": "Microsoft.DataFactory/factories/datasets" }

0
根据我的经验,在 Azure Data Factory Copy activity 中,没有这样的中间件处理机制可以用于删除 bom header
但是,我提供了一个解决方法,你可以使用 Blob Trigger Azure Function 来执行业务逻辑代码,当你的文件移动到 Blob 存储中时。 删除 bom 样例代码:
public static string RemoveBom(String desc, Encoding encode)
{
    string bomString = encode.GetString(encode.GetPreamble());
    if (!string.IsNullOrEmpty(bomString) && desc.StartsWith(bomString))
    {
        desc = desc.Remove(0, bomString.Length);
    }
    return desc;
}

希望它能对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接