Shell 如果文件编码为utf-16le,则获取垃圾字符

Shell 如果文件编码为utf-16le,则获取垃圾字符,shell,ubuntu,awk,sed,Shell,Ubuntu,Awk,Sed,对于编码为utf-16le的csv文件。当我试图读取csv的数据时,它给了我垃圾字符 要获得文件编码,我使用下面的命令 file -bi test.csv head -n1 test.csv | tr '^' ',' 它给了我文本/纯文本;字符集=utf-16le 要读取文件数据,我使用下面的命令 file -bi test.csv head -n1 test.csv | tr '^' ',' 它给了我��冒号1,冒号2,冒号3 为什么它会给我垃圾charchater由于csv文件是

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

要获得文件编码,我使用下面的命令

 file -bi test.csv
head -n1 test.csv | tr '^' ','
它给了我文本/纯文本;字符集=utf-16le

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

 file -bi test.csv
head -n1 test.csv | tr '^' ','
它给了我��冒号1,冒号2,冒号3


为什么它会给我垃圾charchater

由于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编码。

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