Rust: 중국어 문자는 어떻게 읽습니까?

1996 단어 Rust
Rust로 IO를 진행할 때 중국어 문자가 자주 부딪히므로 표준 라이브러리를 사용하는 방법에 문제가 있습니다.그럼 어떻게 해요?
1. 외부 라이브러리 인코딩
toml 파일 [dependencies]에서 다음을 추가합니다.
encoding = “0.2”
2. 중국어 문자가 있는 읽기와 쓰기
1. 중국어 문자가 없습니다. 예를 들어 모두 ASCII 코드로 가능합니다. 표준 라이브러리에 따라 쓰기/읽기
use std::io;
use std::io::prelude::*;
use std::fs::File;

fn main() -> io::Result {
    let mut f = File::open("foo.txt")?;
    let mut buffer = [0; 10];

    // read up to 10 bytes
    f.read(&mut buffer)?;

    let mut buffer = Vec::new();
    // read the whole file
    f.read_to_end(&mut buffer)?;

    // read into a String, so that you don't need to do the conversion.
    let mut buffer = String::new();
    f.read_to_string(&mut buffer)?;

    // and more! See the other methods for more details.
    Ok(())
}

//쓰기
use std::io::prelude::*;
use std::fs::File;

fn main() -> std::io::Result {
    let mut buffer = File::create("foo.txt")?;
    buffer.write_all(b"some bytes")?;
    Ok(())
}

2. 중국어 문자가 있으면 위의 방법은 통하지 않는다.
extern crate encoding;
use encoding::all::GB18030;
use encoding::{DecoderTrap, EncoderTrap, Encoding};
// read
fn file_read(path: &str) -> io::Result {
    let mut f = File::open(path)?;
    let mut reader: Vec = Vec::new();
    f.read_to_end(&mut reader).ok().expect("can not read file");
    let content: String = GB18030.decode(&reader, DecoderTrap::Strict).unwrap();
    println!("content:{}", content);
    Ok(content)
}
// write
fn file_write(text: io::Result>, _path: &str) -> io::Result {
    let text = text.unwrap();
    let mut buffer = File::create(_path)?;
    for tx in text {
        //let tx_u8: Vec = tx.chars().map(|x| x as u8).collect();  ?
        let tx_u8: Vec = GB18030.encode(&tx, EncoderTrap::Strict).unwrap();
        buffer.write_all(&tx_u8)?;
    }
    Ok(())
}

좋은 웹페이지 즐겨찾기