我有一个相当大的SQL文件,它以FFFE的字节顺序标记开头.我使用unicode感知的linux拆分工具将此文件拆分为100,000行块.但是经过这些回窗口时,它不喜欢任何比第一个以外的部分的,因为只有它在FFFE字节顺序标记.
如何使用echo(或任何其他bash命令)添加这两个字节的代码?
基于sed的Anonymous解决方案,sed -i '1s/^/\xef\xbb\xbf/' foo
将BOM添加到UTF-8编码文件中foo
.有用的是,它还将ASCII文件转换为带有BOM的UTF8
要将BOM添加到以"foo-"开头的所有文件,您可以使用sed
.sed
可以选择进行备份.
sed -i '1s/^\(\xff\xfe\)\?/\xff\xfe/' foo-*
strace
这显示sed创建一个名为"sed"的临时文件.如果您确定已经没有BOM,则可以简化命令:
sed -i '1s/^/\xff\xfe/' foo-*
确保您需要设置UTF-16,因为即UTF-8不同.
对于通用解决方案 - 设置正确的字节顺序标记,无论文件是UTF-8,UTF-16还是UTF-32-I,我都会使用vim的'bomb'
选项:
$ echo 'hello' > foo $ xxd < foo 0000000: 6865 6c6c 6f0a hello. $ vim -e -s -c ':set bomb' -c ':wq' foo $ xxd < foo 0000000: efbb bf68 656c 6c6f 0a ...hello.
(-e
表示以ex模式而不是可视模式运行; -s
表示不打印状态消息; -c
表示"执行此操作")