前提・実現したいこと
Rustを使って、Shift-JISのCSVを読み込み・加工後、Shift-JIS(cp932・Windows-31J)でCSV出力
したいと考えております。
発生している問題・エラーメッセージ
UTF-8では出力できているのですが、Shift-JISで出力できず困っております。 まだRustの学び始めで、あまり理解できていない部分が多く申し訳ないのですが、出力できる方法をご教授いただきたく お願いします。 ※色々と検索してみたのですが、Shift-JISでの出力方法を記載しているような情報を見つけることができていません。 ※勝手を言って申し訳ございませんが、より高速出力できる方法があれば、ご教授いただけると幸いです。
該当のソースコード
Rust
1 # 以下の”text”のType 2 # encoding_rs_io::DecodeReaderBytes<std::fs::File, std::vec::Vec<u8>> 3 4 let mut outfile = 5 BufWriter::new(fs::File::create("test.txt").unwrap()); 6 let mut reader = BufReader::new(text); 7 8 loop { 9 let mut buf = String::new(); 10 let num_bytes = reader.read_line(&mut buf).unwrap(); 11 12 ## UTF-8 → Shift-JISに変換する処理 ## 13 14 if num_bytes == 0 { 15 break; 16 } else { 17 outfile.write(buf.as_bytes()).unwrap(); 18 } 19 } 20
試したこと
上記の「UTF-8 → Shift-JISに変換する処理」の部分に以下のようなコードを試してみましたが、
上手くいっておりません。decodeの第一引数には&[u8]をセットしないといけないことは分かったのですが、
この処理をどのように使用すればよいのかがよく分かっていません。
let buf = WINDOWS_31J.decode(buf, DecoderTrap::Strict).unwrap();
・使用したクレート
use std::fs;
use std::fs::File;
use std::*;
use std::io::{self, BufRead, BufReader, BufWriter, Write};
use std::path::Path;
use encoding_rs::SHIFT_JIS;
use encoding_rs_io::DecodeReaderBytesBuilder;
補足情報(FW/ツールのバージョンなど)
・Windows10
・rustc 1.57.0
回答1件
あなたの回答
tips
プレビュー