ruby 是 Mac OS 自带的编程语言,所以无需任何安装。将下面的文本保存为 gbk2utf8.rb
#!/usr/bin/ruby
#tool 4 gbk encoding to utf8
src_path = $*[0]
unless src_path
puts "usage #{$0[2..-1]} gbk_file"
exit 1
end
dir_name,base_name = File.split(src_path)
dst_path = dir_name << '/u8_' << base_name
f_src = File.open(src_path,"r:gbk")
f_dst = File.open(dst_path,"w:utf-8")
f_src.each_with_index do |line,i|
line.encode!("utf-8")
if(i < 2)
#line.gsub!(/gbk/,"utf-8") if(line =~ /^#[ ]*coding*/)
line.gsub!(/gbk/,"utf-8") if(line =~ /^*coding*/)
end
f_dst.puts line
end
f_src.close
f_dst.close
`chmod +x #{dst_path}`
然后运行这个命令即可:ruby gbk2utf8.rb {filename}
PS:当然也有其他的转码方法,比如导入到excel时可以选择文件的原始编码,导出时选择另一个编码。
但是在我的电脑上,excel虽然可以打开280Mb的csv文件(里面含有90万条数据,按月整理的数据不好拆分),但是执行导入操作的时候,根本无响应,我最新款的MBP风扇呜呜响。。。
用此脚本仅需不到5秒就能转换完成!
================ 2019-04-18 更新 ================
Ruby可以,当然Python也可以做。加上一般我用Python来处理csv,索性写在一起岂不美哉?
下面的脚本是一个简单处理csv的脚本。它的功能是删除第一列和最后一列的数据,以GBK打开,也以GBK存储:
import csv
import sys
if __name__ == '__main__':
if len(sys.argv)<=1:
print("Usage: \npython processCsv.py filename.csv")
exit(0)
source = sys.argv[1]
destination = 'processed.csv'
filenames = source.split('.')
if len(filenames)>0:
destination = filenames[0]+'_res.csv'
with open(source, mode='r', encoding='gbk', errors='ignore') as f:
with open(destination, 'w', encoding='gbk', newline='') as fw:
writer = csv.writer(fw)
reader = csv.reader(f)
for row in reader:
row.pop(0)
row.pop(-1)
writer.writerow(row)