1

我正在创建一个 shell 脚本 (KSH),我想将没有 BOM 的 UTF-8 csv 文件转换为带有 BOM 的 UTF-8 csv 文件(或者只是将 BOM 添加到没有 BOM 的文件中)。

谢谢你的帮助

4

1 回答 1

2

您可以通过在文件内容之前输出它来添加您想要的 aBOMination,例如在添加 aBOMination 时从 stdin 复制到 stdout:

#!/bin/ksh

printf '\357\273\277'
cat

但是你为什么要这样做呢?这几乎总是一个坏主意。

这是另一种解决方案,它仅在不存在时才写出新的 aBOMination。正如你所看到的,它很复杂......这只是为什么首先使用 aBOMinations 是一个坏主意的原因之一。它可能需要 GNU od

#!/bin/ksh

# write a new aBOMination
printf '\357\273\277'

# now read the first 3 bytes of the original file
set -- $(od -N3 -to1)
if [ "$2" = 357 -a "$3" = 273 -a "$4" = 277 ]; then
    # there already was an aBOMination.
    # Absorb it and write out the rest of the file
    cat
else
    # the first three bytes of the file were normal. Output them.
    if [ $# -lt 3 ]; then
        # file was empty
        :
    elif [ $# -eq 3 ]; then
        # file had only one byte
        printf "\\$2"
    elif [ $# -eq 4 ]; then
        # file had only two bytes
        printf "\\$2\\$3"
    else
        # file had 3 or more bytes.
        # Ouput the first 3
        printf "\\$2\\$3\\$4"
        # then the rest
        cat
    fi
fi
于 2012-05-28T16:35:20.787 回答