如何使用 bash 处理包含 unicode(泰语)字符的 CSV?
How do I manipulating CSVs containing unicode (Thai) characters using bash?
我有一个包含泰语关键字的 Adwords 转储,我将使用它来连接来自另一个数据库的数据。
理论上,我抓取文件,剪掉顶部和底部无用的行,稍微清理一下,然后将其作为新文件上传到 PostgreSQL table。
实际上,即使文件在 Excel 和 OpenOffice 中打开正常,字符也会在途中(实际上,从一开始)出现乱码。以下在我的本地机器 (运行 OSX) 和服务器 (运行 Ubuntu) 上都是正确的。
首先,我已经将语言环境设置为 UTF-8:
$ echo "กระเป๋า สะพาย คอนเวิร์ส"
กระเป๋า สะพาย คอนเวิร์ส
但是,在 CLI 上查看 CSV(假设它只包含上述字符串)给我这样的信息:
$ head file.csv
#0@2 *02" -@'4#L*
知道问题出在哪里吗?
原始文件编码错误。
$ file file.csv
file.csv: Little-endian UTF-16 Unicode English text
快速修复:
$ iconv -f UTF-16 -t UTF-8 file.csv
$ head file.csv
กระเป๋า สะพาย คอนเวิร์ส
我有一个包含泰语关键字的 Adwords 转储,我将使用它来连接来自另一个数据库的数据。
理论上,我抓取文件,剪掉顶部和底部无用的行,稍微清理一下,然后将其作为新文件上传到 PostgreSQL table。
实际上,即使文件在 Excel 和 OpenOffice 中打开正常,字符也会在途中(实际上,从一开始)出现乱码。以下在我的本地机器 (运行 OSX) 和服务器 (运行 Ubuntu) 上都是正确的。
首先,我已经将语言环境设置为 UTF-8:
$ echo "กระเป๋า สะพาย คอนเวิร์ส"
กระเป๋า สะพาย คอนเวิร์ส
但是,在 CLI 上查看 CSV(假设它只包含上述字符串)给我这样的信息:
$ head file.csv
#0@2 *02" -@'4#L*
知道问题出在哪里吗?
原始文件编码错误。
$ file file.csv
file.csv: Little-endian UTF-16 Unicode English text
快速修复:
$ iconv -f UTF-16 -t UTF-8 file.csv
$ head file.csv
กระเป๋า สะพาย คอนเวิร์ส