File 逐行读取大文件并避免Rust中的utf8错误

File 逐行读取大文件并避免Rust中的utf8错误,file,utf-8,rust,vec,File,Utf 8,Rust,Vec,我有一个很大的文件,“应该”由JSON字符串组成。然而,当我使用下面的代码时,我得到一个“流没有包含有效的UTF8” 现在,答案是使用Vec而不是String。但是我看到的所有代码都有file.read\u to\u end(buf)作为答案,这对于我必须处理的文件大小是不起作用的 我想要的是逐行读取文件,使用有损utf8转换,然后进行一些计算并将输出推送到另一个文件。您可以使用BufReader的函数。它非常类似于文件的read\u to\u end,但也采用字节分隔符参数。此分隔符可以是任何

我有一个很大的文件,“应该”由JSON字符串组成。然而,当我使用下面的代码时,我得到一个“流没有包含有效的UTF8”

现在,答案是使用Vec而不是String。但是我看到的所有代码都有
file.read\u to\u end(buf)
作为答案,这对于我必须处理的文件大小是不起作用的

我想要的是逐行读取文件,使用有损utf8转换,然后进行一些计算并将输出推送到另一个文件。

您可以使用BufReader的函数。它非常类似于文件的
read\u to\u end
,但也采用
字节
分隔符参数。此分隔符可以是任何字节,换行符
\n
字节适合您。之后,您可以从UTF-8无损地转换缓冲区。它看起来像这样:

let file=file::open(“foo.txt”)?;
让mut reader=BufReader::new(文件);
让mut buf=vec![];
而让Ok(u)=reader.read_直到(b'\n',&mut buf){
如果buf.为空(){
打破
}
let line=String::from_utf8_lossy(&buf);
println!(“{}”,行);
buf.clear();
}
好(())
当然,这可以抽象为一个迭代器,就像这样,但基本逻辑与上面相同


注意:与
函数不同,生成的字符串将包括换行符和回车符(
\r
)。如果解决方案的行为必须与
函数匹配,则需要去掉这些字符。

这里与JSON有什么关系?你不能结合使用吗?文件的大小与UTF-8无关。您的文件要么是UTF-8,要么不是。“逐行读取大文件并避免utf8错误”毫无意义。谢谢!仍然开始生锈,所以不知道所有的功能!
let file = File::open("foo.txt")?;
let reader = BufReader::new(file);

for line in reader.lines() {
    println!("{}", line?);
}

Ok(())