在中文,或者东亚字符中,编码解码一直是比较繁琐的问题,总是需要一些额外的处理工作。在 Rust 语言及其生态中,官方和社区已经提供了一些优秀的 crate,让我们的处理工作量大大减少,效率提高很多。关键是,性能和稳定性,在 Rust 中非常出色。

Rust生态中,有 4 个 crate:percent-encoding、url、data-encoding、base64 分别对百分比编码(URL 编码)字符串、将字符串编码为 application/x-www-form-urlencoded、编码和解码十六进制、编码和解码 base64 提供了支持。

百分比编码(URL 编码)字符串

使用 percent-encoding crate 中的 utf8_percent_encode 函数对输入字符串进行百分比编码(URL 编码)。解码使用 percent_decode 函数。编码集定义哪些字节(除了非 ASCII 字节和控制键之外)需要进行百分比编码(URL 编码),这个集合的选择取决于上下文。例如,url 对 URL 路径中的 ? 编码,而不对查询字符串中的 ? 编码。

编码的返回值是 &str 切片的迭代器,然后聚集为一个字符串 String

use percent_encoding::{utf8_percent_encode, percent_decode, AsciiSet, CONTROLS};use std::str::Utf8Error;/// https://url.spec.whatwg.org/#fragment-percent-encode-setconst FRAGMENT: &AsciiSet = &CONTROLS.add(b' ').add(b'"').add(b').add(b'>').add(b'`');fn main() -> Result {    let input = "confident, productive systems programming";    let iter = utf8_percent_encode(input, FRAGMENT);    let encoded: String = iter.collect();    assert_eq!(encoded, "confident,%20productive%20systems%20programming");    let iter = percent_decode(encoded.as_bytes());    let decoded = iter.decode_utf8()?;    assert_eq!(decoded, "confident, productive systems programming");    Ok(())}

编码和解码 base64

使用 encode 将字节切片编码为 base64 字符串,对 base64 字符串解码使用 decode。

use error_chain::error_chain;use std::str;use base64::{encode, decode};error_chain! {    foreign_links {        Base64(base64::DecodeError);        Utf8Error(str::Utf8Error);    }}fn main() -> Result {    let hello = b"hello rustaceans";    let encoded = encode(hello);    let decoded = decode(&encoded)?;    println!("origin: {}", str::from_utf8(hello)?);    println!("base64 encoded: {}", encoded);    println!("back to origin: {}", str::from_utf8(&decoded)?);    Ok(())}

以上实例代码都是完整的、可独立运行的程序,因此你可以直接复制它们到自己的项目中进行试验。

如果希望从头了解如何运行上述实例代码,请参考《Rust 实践指南》中关于本书-如何使用本书实例部分。也可以复制链接:http://budshome.com/rust-cookbook/about.html 点击阅读原文进行更详细的学习。

golang中base64编码_Rust 中的字符集编码 Rust 实践指南相关推荐

  1. php中base64和js中base64可互相加解密

    php中base64和js中base64可互相加解密 前提:加解密的字符必须转换成UTF-8编码格式. php代码: <?php $str='中国航母辽宁号-歼15战机GOOD=ok'; ech ...

  2. new file会创建文件吗_Rust 文件系统处理之文件读写 Rust 实践指南

    Rust 中,文件读写处理简单而高效.代码也很紧凑,容易阅读.我们从读取文件的字符串行.避免读取写入同一文件.使用内存映射随机访问文件这三个文件处理中的典型案例来了解一下. 文件处理场景大家都很熟悉, ...

  3. 你不知道的 字符集和编码(编码字符集与字符集编码)

    我的上篇文章,有朋友提出字符集和编码的区别,我在此立文和大家讨论下 常说的字符集和编码区别,其实就是编码字符集和字符集编码的区别,其实,单单如果只是说字符集,没有任何编码的概念的话,那么字符集其实仅仅 ...

  4. linux mysql配置文件修改编码,linux修改mysql字符集编码

    摘要: 本文适用于mysql5.5 mysql5.6  其他版本未测试 mysql -u帐号 -p密码  登录mysql mysql>SHOW VARIABLES LIKE 'character ...

  5. 字符集编码详解【ASCII 、GB2312、GBK、GB18030、unicode、UTF-8】(转)

    ASCII字符集编码 ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字符. 只支持ASCI ...

  6. 常用字符集编码的概要特性(一)

    搞清常用编码特性是解决字符集编码问题的基础.字符集编码的识别与转换.分析各种乱码产生的原因.编程操作各种编码字符串(例如字符数计算.截断处理)等都需要弄清楚编码的特性. 了解一种字符集编码主要是要了解 ...

  7. ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解

    ASCII码表在线查询: http://www.weste.net/tools/ASCII.asp ASCII字符集编码 ASCII码是7位编码,字符在计算机中以其ASCII码方式表示,其长度为1个字 ...

  8. ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解(转载)

    ASCII字符集编码 ASCII码是7位编码,字符在计算机中以其ASCII码方式表示,其长度为1个字节, 有符号字符型数.编码范围是0x00-0x7F(0~127).ASCII字符集包括英文字母.阿拉 ...

  9. ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码

    ASCII字符集编码 ASCII字符集编码ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字 ...

  10. ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解 1

    ASCII字符集编码     ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字符.     ...

最新文章

  1. P1965 夜夜的数据加强 题解
  2. 2021-2025年中国一次性生物处理系统行业市场供需与战略研究报告
  3. python类的构造方法和assert的使用,用MethodType动态绑定类方法
  4. 处理接口超时_开发中那些事儿:为啥update会超时呢?
  5. 浏览器往返缓存(Back/Forward cache)问题的分析与解决
  6. 作为软件工程师,如何进行知识管理
  7. 供应链服务产业数据知多少
  8. 洛谷3374:树状数组1(线段树/树状数组模板)
  9. 作业必备:【操作系统实验报告】实验一:熟悉Ubuntu环境(后续会更新~)
  10. c#明华rf读卡器_C#调用第三方API接口-案例明华读卡器
  11. PHP高并发高负载下的3种实战场景解决方法
  12. 服务器间大文件传输软件,四种常用的大文件传输方法
  13. win8更改计算机锁屏时间,在win8系统中设置自动锁屏功能的方法
  14. 软件工程毕业设计课题(1)基于python的毕业设计python疫苗预约系统毕设作品
  15. 对女朋友超级抠门的星座男 12星座老公的致命缺点 12星女无法招架的求爱手段...
  16. 北京 社保 减员 操作
  17. 转:结构化风险模型与业绩归因
  18. 骑行318、 2016.7.18
  19. 基于经度坐标校正鱼眼图像
  20. 软件测试实际操作(降龙之术)

热门文章

  1. Java中获取request对象的几种方法
  2. AngularJs ngList、ngRepeat、ngModelOptions
  3. HTML5 FormData实现文件上传实例
  4. jQuery使用之(二)设置元素的样式
  5. ASP.NET中缓存(cache)的控制方法
  6. 5.微服务设计 --- 分解单块系统
  7. 56. Yii Modules
  8. jerasure 2.0译文
  9. 几种 vue的数据交互形式
  10. hadoop系列一:hadoop集群安装