我有两个csv文件,如果用TextEdit打开,它们是完全相同的。但是,当使用'diff‘命令运行终端时,它显示了一些我无法确定的差异。
MacBook-Pro-2 Desktop % diff goodcsv.csv completecsv.csv
1c1
< AccountNo.,PromptPay ID,Account Name,Amount,Description
---
> AccountNo.,PromptPay ID,Account Name,Amount,Description发布于 2022-03-06 18:55:15
我很确定这是一个BOM表在其中一个文件的开头。
Diff告诉你区别是第一行,第1字符:1c1。
我复制了您的标题并创建了第一行:
AccountNo.,PromptPay ID,Account Name,Amount,Description
1,2,Acme,2000.00,For a foo然后,我添加了一个BOM,并将其保存为另一个文件:
% gocsv clean --add-bom input.csv > input_bom.csv现在,当我把这两件事分开的时候,我得到了你的结果:
% diff input.csv input_bom.csv
1c1
< AccountNo.,PromptPay ID,Account Name,Amount,Description
---
> AccountNo.,PromptPay ID,Account Name,Amount,Description对于BSD (macOS终端),您可以使用less或hexdump可视化BOM。我发现less对我的输出更直接:
% less input_bom.csv
<U+FEFF>AccountNo.,PromptPay ID,Account Name,Amount,Description
1,2,Acme,2000.00,For a fooFEFF是字节顺序标记字符的Unicode代码点。
hexdump将为您的文件提供完整和未修饰的真相:
% hexdump -C input_bom.csv
00000000 ef bb bf 41 63 63 6f 75 6e 74 4e 6f 2e 2c 50 72 |...AccountNo.,Pr|
00000010 6f 6d 70 74 50 61 79 20 49 44 2c 41 63 63 6f 75 |omptPay ID,Accou|
00000020 6e 74 20 4e 61 6d 65 2c 41 6d 6f 75 6e 74 2c 44 |nt Name,Amount,D|
00000030 65 73 63 72 69 70 74 69 6f 6e 0a 31 2c 32 2c 41 |escription.1,2,A|
00000040 63 6d 65 2c 32 30 30 30 2e 30 30 2c 46 6f 72 20 |cme,2000.00,For |
00000050 61 20 66 6f 6f 0a |a foo.|
00000056前三个字节,ef bb bf,是构成BOM的UTF-8编码字节序列;您也可以看到一些东西在那里,但不能从三个领先的点,...AccountNo打印。
我使用GoCSV的打扫命令来添加BOM;您可以使用它的--strip-bom选项来消除它。如果您在命令行上使用CSV进行任何操作,那么GoCSV是一个非常棒的工具;它是为macOS、英特尔和ARM预置。
https://stackoverflow.com/questions/71371669
复制相似问题