我有这 3 个文件
21/08/2014 07:15 PM 122 Tw2AWK.csv
21/08/2014 07:15 PM 125 Tw2Notepad.csv
21/08/2014 07:15 PM 119 Tw2REPL.csv
C:\myfiles>文件 Tw2AWK.csv TwREPL.csv Tw2Notepad.csv
Tw2AWK.csv; UTF-8 Unicode text, with CRLF line terminators
Tw2REPL.csv; UTF-8 Unicode text
Tw2Notepad.csv; UTF-8 Unicode (with BOM) text, with CRLF line terminators
这些文件的 HEX 如下
C:\myfiles>xxd -p Tw2REPL.csv
0a222344656c686947616e675261706520776173206120736d616c6c2069
6e636964656e7420746f2023536d616c6c5261706973744a6169746c6579
20646e61696e6469612e636f6d2f696e6469612f7265706f72742d69e280
a6207069632e747769747465722e636f6d2f6762565070776637744f22
C:\myfiles>xxd -p Tw2AWK.csv
0d0a222344656c686947616e675261706520776173206120736d616c6c20
696e636964656e7420746f2023536d616c6c5261706973744a6169746c65
7920646e61696e6469612e636f6d2f696e6469612f7265706f72742d69e2
80a6207069632e747769747465722e636f6d2f6762565070776637744f22
0d0a
C:\myfiles>xxd -p Tw2Notepad.csv
efbbbf0d0a222344656c686947616e675261706520776173206120736d61
6c6c20696e636964656e7420746f2023536d616c6c5261706973744a6169
746c657920646e61696e6469612e636f6d2f696e6469612f7265706f7274
2d69e280a6207069632e747769747465722e636f6d2f6762565070776637
744f220d0a
我希望 Tw2REPL.csv 看起来像 Tw2Notepad.csv 我该怎么做?
笔记:我通过命令行完成了所有操作。但我可以使用任何第三方独立 exe。我使用的是 Windows XP
请帮忙,这对我很重要
答案1
首先,将字节ef bb bf
(UTF-8 编码的 U+FEFF)添加到文件开头。这是字节顺序标记,它是为 UTF-16 发明的,对于 UTF-8 来说没有多大意义,尽管有些程序依赖它。
$ (echo ef bb bf; xxd -p file.csv) | xxd -r -p > file.csv.new
C:\> (echo ef bb bf & xxd -p file.csv) | xxd -r -p > file.csv.new
然后,将 Unix 行尾(LF 0a
)转换为 Windows 格式(CR LF 0d 0a
)。
$ unix2dos file.csv
or: $ todos file.csv
or: $ sed "s/$/\r/" file.csv > file.csv.new
既然你有xxd
,我假设你也有 Vim。你可以在 Vim 中打开文件,然后使用:
:set bomb ff=dos
:w