rustで非UTF-8のcsvファイルを読み込む
csvファイルの読み込みで少し嵌ったのでメモ.
結論
一度Vec
で読み込んでからUTF-8にencodeして,csvとして読み込む.
csv
とencoding_rs
クレートを使用.
Cargo.toml
:
[dependencies] csv = "1.1.6" encoding_rs = "0.8.29"
main.rs
:
extern crate csv; use encoding_rs; use std::error::Error; use std::process; use std::fs; fn run() -> Result<(), Box<dyn Error>> { let file_path = "hogehoge.csv"; let file = fs::read(file_path).unwrap(); let (res, _, _) = encoding_rs::SHIFT_JIS.decode(&file); let mut rdr = csv::Reader::from_reader(res.as_bytes()); for result in rdr.records() { let record = result?; println!("{:?}", record(1)); } Ok(()) } fn main() { if let Err(err) = run() { println!("{}", err); process::exit(1); } }
環境
cargo: v1.55.0
rustc: v1.55.0
その他
もっと効率の良い書き方,高速な書き方ご存知でしたら教えてください.