You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed为现有文件添加UTF-16 BOM?脚本生成文件补BOM方法

给已存在文件添加UTF-16 BOM的解决方案

当然可以给已存在的pagecounts-${_date}文件添加UTF-16 BOM!你考虑用临时文件处理的思路非常稳妥——直接修改原文件容易出意外,用临时文件过渡是这类操作的标准做法。下面给你几种适配不同场景的实现方法:

方法一:用iconv转换编码并添加BOM(推荐)

如果你的原文件是UTF-8编码,需要转换成带BOM的UTF-16格式(常见的是UTF-16LE,即Windows常用的小端格式),可以用iconv命令完成编码转换和BOM添加:

# 将UTF-8文件转换为带BOM的UTF-16LE格式
iconv -f UTF-8 -t UTF-16LE "$TMPDIR/pagecounts-${_date}" > "$TMPDIR/temp_bom_file"
# 用临时文件替换原文件
mv "$TMPDIR/temp_bom_file" "$TMPDIR/pagecounts-${_date}"

如果需要UTF-16BE(大端格式),只需把命令中的UTF-16LE替换为UTF-16BE即可。

方法二:直接插入UTF-16 BOM(适用于原文件已是UTF-16编码的情况)

如果你的文件本身就是UTF-16编码,只是缺少开头的BOM,可以直接在文件头部插入对应的BOM字节:

  • UTF-16LE的BOM是\xFF\xFE
  • UTF-16BE的BOM是\xFE\xFF

执行以下命令即可插入:

# 示例:插入UTF-16LE BOM
printf '\xFF\xFE' > "$TMPDIR/temp_bom_file"
cat "$TMPDIR/pagecounts-${_date}" >> "$TMPDIR/temp_bom_file"
mv "$TMPDIR/temp_bom_file" "$TMPDIR/pagecounts-${_date}"

优化生成流程:从源头避免BOM缺失

既然你是通过cat $TMPDIR/*.filtered > $TMPDIR/pagecounts-${_date}生成目标文件,也可以直接在生成时就加上BOM,省去后续处理步骤:

# 先写入UTF-16LE BOM到目标文件
printf '\xFF\xFE' > "$TMPDIR/pagecounts-${_date}"
# 再将过滤后的文件内容追加进去
cat $TMPDIR/*.filtered >> "$TMPDIR/pagecounts-${_date}"

# 后续排序时,记得让sort工具支持UTF-16编码
sort --encoding=UTF-16 "$TMPDIR/pagecounts-${_date}" > "$TMPDIR/sorted_pagecounts-${_date}"

小提示:确认文件编码

如果你不确定原文件的编码,可以用file命令快速查看:

file "$TMPDIR/pagecounts-${_date}"

根据输出结果选择对应的处理方法,能避免乱码问题。

内容的提问来源于stack exchange,提问作者Saeko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:32:39