【问题标题】:Getting junk character if file encoding is utf-16le如果文件编码为 utf-16le,则获取垃圾字符
【发布时间】:2021-04-12 23:17:11
【问题描述】:

对于编码为 utf-16le 的 csv 文件。当我尝试读取 csv 的数据时,它给了我垃圾字符

要获取文件编码,我使用以下命令

 file -bi test.csv

它给了我文本/纯文本; charset=utf-16le

要读取文件数据,我使用以下命令

head -n1 test.csv | tr '^' ','

它给了我��colon1,colon2,colon3

为什么它给我垃圾charchater

【问题讨论】:

  • 字节顺序标记,不是垃圾字符。

标签: shell ubuntu awk sed


【解决方案1】:

由于 csv 文件使用 UTF-16LE 编码,因此文件以 BOM 开头 (字节顺序标记)、0xff 和 0xfe。您可以通过以下方式识别它:

head -n1 test.csv | xxd

UTF-8 现在最常用,而 UTF-16 的使用越来越少(包括 Windows)。 您的语言环境也将默认为 UTF-8。所以请尝试:

iconv -f UTF-16LE -t UTF-8 test.csv | head -n1 | tr '^' ','

将 csv 文件转换为 UTF-8 编码。

【讨论】:

  • 无法从 head -n1 test.csv | 识别它xxd。
  • 00000000: fffe 4d00 6f00 6200 6900 6c00 6500 6e00 ..M.o.b.i.l.e.n. .但是从这里如何识别它。
  • xxd 命令转储二进制数据。您可以在开头看到“00000000: fffe”部分。 “00000000:”是地址,“fffe”是数据。它告诉文件以“0xfffe”开头,BOM 用于 UTF-16LE 编码。