用Rust进行IO时,往往会碰到中文字符,用标准库的方法是有问题的。那如何办?

一、外部库 encoding

在toml文件[dependencies]下加入:

encoding = “0.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 bytesf.read(&mut buffer)?;let mut buffer = Vec::new();// read the whole filef.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<String> {let mut f = File::open(path)?;let mut reader: Vec<u8> = 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<Vec<String>>, _path: &str) -> io::Result<()> {let text = text.unwrap();let mut buffer = File::create(_path)?;for tx in text {//let tx_u8: Vec<u8> = tx.chars().map(|x| x as u8).collect(); 为什么这样写不行?let tx_u8: Vec<u8> = GB18030.encode(&tx, EncoderTrap::Strict).unwrap();buffer.write_all(&tx_u8)?;}Ok(())
}

Rust: 如何读写中文字符?相关推荐

  1. java 程序怎么设置中文_怎么让这个简单JAVA程序读写中文字符

    怎么让这个简单JAVA程序读写并正确显示中文字符,现在它只能读写显示英文字符.//这是个简单的读写文本的程序import .*;import t.*;import javax.swing.*;impo ...

  2. java处理中文字符_Java中文字符处理的四大迷题

    虽然计算机对英文字符的支持非常不错,我们也恨不得写的程序只会处理英文的数据,但是昨为中国人,无可避免地要处理一些中文字符.当很简单的一件事情,遇到了中文,一切就不同了!本文就会讲述实际生产环境中遇到的 ...

  3. android java 中文乱码_android读写中文如何避免乱码详解

    前言 android读取文件中文出现乱码的原因无非就是,读取文件的字符格式与写如文件的格式不一致.因此,避免中文乱码,要在写入文件的时候按照一定的格式写入,读取的时候按照一定的格式读取.这样对应就不会 ...

  4. python读中文-python读写中文

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. api api annotation json.dumps( ) 将py ...

  5. python使用codecs模块进行文件操作-读写中英文字符

    由于python中默认的编码是ascii,如果直接使用open方法得到文件对象然后进行文件的读写,都将无法使用包含中文字符(以及其他非ascii码字符),因此建议使用utf-8编码. 使用方法 读 下 ...

  6. python 循环写文件_循环-读写文件-字符编码

    目录: 1.1 while与for循环 1.赋值魔法 #1. 序列解包: 将多个值的序列解开,然后放到序列的变量中. x,y,z = 1,2,3 print(x,y,z) #the result : ...

  7. Python之中文字符问题

    1.        在Python中使用中文 在Python中有两种默认的字符串:str和unicode.在Python中一定要注意区分"Unicode字符串"和"uni ...

  8. 中文字符乱码的原因及解决办法

    中文字符乱码的原因及解决办法 java的内核是Unicode的,也就是说,在程序处理字符时是用Unicode来表示字符的,但是文件和流的保存方式是使用字节流的.在java的基本数据类型中,char是U ...

  9. 解决InternetReadFile下载带有中文字符的文件失败的方案

    如下代码: // HttpDownFileDemo.cpp : 定义控制台应用程序的入口点. //这是一个Http下载文件的例子 #include "stdafx.h" #incl ...

  10. C++fstream文件流处理对中文字符不支持的解决办法

    转载一篇C++文件流处理中文路径问题的方法. http://www.cnblogs.com/upendi/archive/2013/05/10/3072195.html [以下内容转自:我住包子山 让 ...

最新文章

  1. 压力传感器变送器读取数据测试:MIK-BSQW
  2. 直播预告丨如何用 A/B 测试做好一场页面布局试验?
  3. 使用python3 解析html对称标签
  4. Navicat——MySQL之delimiter默认设置问题
  5. Android Studio开发基础之Activity之间参数传递
  6. vue element项目常见实现表格内部可编辑功能
  7. jupyter notebook matplotlib绘制动态图并显示在notebook中
  8. Atitit 计算机通信技术概要 目录 1. OSI参考模型将整个协议垂直地分为7个层次 : 1 1.1. 通信类别 2 2. 传输方式 计算机通信可分为直接式和间接式两种。 2 2.1. 1)直
  9. API Monitor简介(API监控工具)
  10. 解决Win10磁盘占用100%
  11. 2021年电子竞赛四天三夜征程—-信号失真度测量装置(A题)
  12. 像素三国志在线html5小游戏,像素三国志bt版
  13. (.Net常识)(int),Int32.Parse,Conver.ToInt32三者在什么情况下使用以及其区别。
  14. 谈一谈我对本科计算机专业的认识
  15. 中间件小师妹 de 年度工作总结
  16. 获得Oracle ACE称号
  17. 斯坦福CS234增强学习——(1)简介
  18. Android双系统之基本问题研究
  19. 程序员之间的鄙视链-2022.10.04
  20. 封闭式基金高折价蕴涵巨大投资机会

热门文章

  1. 视频播放器+控制器--封装
  2. VMware Harbor现已加入Rancher社区Catalog
  3. 【MPI0】学习资料搜集
  4. C++Builder 2010深入TForm类之属性
  5. SmartGit 无限试用方法
  6. 使用vs2005经验与教训(关于masterpage,menu,gridview及对exce的l操作)
  7. 甲骨文创始人埃里森的10大混蛋行为:曾翻微软垃圾堆
  8. 科学问题表述是机理与机制的区别
  9. 七月算法机器学习 (16)人工神经网络
  10. 190703每日一句