私は(成功せずに)スクリプトを検索しています。スクリプトはバッチファイルとして機能し、UTF-8テキストファイルにBOMがない場合は、その前にBOMを追加できます。
それが書かれている言語(Perl、python、c、bash)も、動作するOSも私には関係ありません。さまざまなコンピューターにアクセスできます。
多くのWindowsプログラムがBOMがない場合、UTF-8テキストファイルを読み取るのに問題があるため、逆に(BOMを取り除く)ためのスクリプトがたくさん見つかりました。
私は明白を逃したのですか?
ありがとう!
このaddbom.shは、「file」コマンドと [〜#〜] icu [〜#〜] の「uconv」コマンドを使用して作成しました。
#!/bin/sh
if [ $# -eq 0 ]
then
echo usage $0 files ...
exit 1
fi
for file in "$@"
do
echo "# Processing: $file" 1>&2
if [ ! -f "$file" ]
then
echo Not a file: "$file" 1>&2
exit 1
fi
TYPE=`file - < "$file" | cut -d: -f2`
if echo "$TYPE" | grep -q '(with BOM)'
then
echo "# $file already has BOM, skipping." 1>&2
else
( mv "${file}" "${file}"~ && uconv -f utf-8 -t utf-8 --add-signature < "${file}~" > "${file}" ) || ( echo Error processing "$file" 1>&2 ; exit 1)
fi
done
edit:mv
引数を引用符で囲みました。 @DirkRに感謝します。このスクリプトがとても役に立ちました。
これのために私が見つけた最も簡単な方法は
#!/usr/bin/env bash
#Add BOM to the new file
printf '\xEF\xBB\xBF' > with_bom.txt
# Append the content of the source file to the new file
cat source_file.txt >> with_bom.txt
私はそれが外部プログラム(猫)を使用していることを知っています...しかしそれはbashで簡単に仕事をします
OSXでテスト済みですが、Linuxでも動作するはずです。
ファイルにはまだBOM(!)がないことを前提としています。
(回答は https://stackoverflow.com/a/9815107/1260896 yingtedによる)
「foo-」で始まるすべてのファイルにBOMを追加するには、sed
を使用できます。 sed
には、バックアップを作成するオプションがあります。
sed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' foo-*
BOMが既に存在しないことが確実な場合は、コマンドを簡略化できます。
sed -i '1s/^/\xef\xbb\xbf/' foo-*
つまり、UTF-16が異なるため、UTF-8を設定する必要があることを確認してください(それ以外の場合は LinuxでUnicodeバイトオーダーマーカーを再度追加するにはどうすればよいですか? )
Yaron U.のソリューションの改善点として、すべてを1行で行うことができます。
printf '\xEF\xBB\xBF' | cat - source.txt > source-with-bom.txt
cat -
ビットは、印刷コマンドから何がパイプされているかをsource.txt
の前に連結することを示しています。 OS XとUbuntuでテスト済み。
とても簡単だと思います。ファイルがalways UTF-8であると想定します(エンコーディングが検出されない場合、knowエンコーディング):
最初の3文字を読みます。それらをUTF-8 BOMシーケンスと比較します(ウィキペディアによると0xEF、0xBB、0xBFです)。同じ場合は、それらを新しいファイルに印刷してから、他のすべてを元のファイルから新しいファイルにコピーします。異なる場合は、最初にBOMを印刷し、次に3文字を印刷してから、元のファイルから新しいファイルにそれ以外のすべてを印刷します。
Cでは、fopen/fclose/fread/fwriteで十分です。
Steven R. Loomis のコードに基づいてスクリプトを作成しました。 https://github.com/Vdragon/addUTF-8bomb
チェックアウト https://github.com/Vdragon/C_CPP_project_template/blob/development/Tools/convertSourceCodeToUTF-8withBOM.bash.sh このスクリプトの使用例。