rust 读取非uft-8文件line-by-line
rust std::io::BufRead
提供了lines方法。但本身只支持UTF_8
编码。遇到非utf-8编码时直接报错。本文通过使用第三方cratesencoding
增加对编码的支持。 cargo add encoding
code
use std::io::preclude::*;
use encoding::{all::GB18030,DecoderTrap};
//“这是一个字符串\n将会被读取”
let bytes: &[u8] = &[
213, 226, 202, 199, 210, 187, 184, 246, 215, 214, 183, 251, 180, 174, 10, 189, 171,
187, 225, 177, 187, 182, 193, 200, 161,
];
let mut buf: Vec<u8> = Vec::new();
loop {
match bytes.read_until(b'\n', &mut buf) {
Ok(0) => break,
Ok(_) => {
let mut line = String::