2

我在这里找到了一个非常有用的 perl ,它将文本文件的文件名写入文件的第一行。我从 OS X Yosemite 的终端运行它:

perl -i -pe 'BEGIN{undef $/;} s/^/\nFilename:$ARGV\n/' `find . -name '*.TXT'`

经过一些修改,我认为它已经解决了我的具体问题,但是我选择的文件是 UTF-16LE,我发现这个命令是用 UTF-8 编写的,并且使输出变得一团糟(文本明显正确但在 excel、filemaker 等的计算中不被识别)。

经过几次尝试后,我需要帮助以获取此脚本以将 UTF-16LE 中的文件名写入文件的开头。(注意:我现在确实有一种将文件批量转换为 UTF-8 的解决方法,然后运行它,但是我更愿意一步完成这个工作流程)。

4

1 回答 1

1

reinierpost 是正确的——它更多的是关于删除原始的 unicode 字节顺序标记 (BOM)。最终起作用的是:

perl -i -pe 'BEGIN{undef $/;} s/\xFF\xFE/Filename:$ARGV\n/' `find . -name '*.TXT'`

其中 UTF-16LE BOM \xFF\xFE 被我的新字符串替换。其他一些 BOM 供参考: - iso-10646-1 > \xFE\xFF - UTF-16BE > \xFE\xFF - UTF-8 > \xEF\xBB\xBF

我还能够将新文本写入 UTF-16LE

perl -i -pe 'BEGIN{binmode STDIN,":encoding(utf8)";binmode STDOUT,":encoding(utf16)"; undef $/;} s/\xFF\xFE/\xFF\xFE\nFilename:$ARGV\n/' `find . -name '*.TXT'`

但是我现在相信我的源数据是 UTF8 和 UTF16 的混合包,因为最后一个版本在新标题和数据之间创建了一组混合字符。感谢 reinierpost 引导我朝着正确的方向前进。如果其他人可以改进这一点,我仍然很感兴趣。

于 2015-12-05T03:14:42.593 回答