Как удалить спецификацию из файла UTF-8?
У меня есть файл в кодировке UTF-8 с BOM и я хочу удалить BOM. Существуют ли какие-либо средства командной строки linux для удаления спецификации из файла?
$ file test.xml
test.xml: XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines
3 ответа:
BOM-это Unicode codepoint U+FEFF; кодировка UTF-8 состоит из трех шестнадцатеричных значений 0xEF, 0xBB, 0xBF.
С помощью bash можно создать спецификацию UTF-8 со специальной формой кавычек
$''
, которая реализует эскейпы Unicode:$'\uFEFF'
. Таким образом, в случае bash надежным способом удаления спецификации UTF-8 из начала текстового файла будет:sed -i $'1s/^\uFEFF//' file.txt
Это позволит оставить файл без изменений, если он не начинается с спецификации UTF-8, а в противном случае удалить спецификацию.
Если вы используете некоторые другая оболочка, вы можете обнаружить, что
"$(printf '\ufeff')"
производит символ BOM (который работает сzsh
, а также с любой оболочкой безprintf
встроенного, при условии, что/usr/bin/printf
является версией Gnu), но если вы хотите Posix-совместимую версию, вы можете использовать:sed "$(printf '1s/^\357\273\277//)" file.txt
(флаг редактирования
-i
на месте также является расширением Gnu; эта версия записывает возможно измененный файл в stdout.)