我们在上一章回中介绍了"characters包"相关的内容,本章回中 将介绍convert包,闲话休提,让我们一起Talk Flutter吧。
1. 概念介绍
我们在上一章回中介绍了字符相关的内容,本章回中介绍的内容也与字符有关。我们都知道字符有不同的编码,比如常用的ASCII
码,以及更加通用的UTF8
编码。在项目中会遇到转换字符需编码的需求,怎么办呢?本章回中将介绍具体的转换方法。
2. 使用方法
在dart中可以使用convert
包来实现转移字符编码的功能,该包是dart官方提供的,我们可以放心使用,该包提供了常用的编码类型,比如utf8,ascii等。
我们可以单独在yaml配置文件中导入这个包,也可以不导入包,因为flutter官方的SDK中已经包含这个包。我们只需要在头文件中引入包就可以。import 'dart:convert';
在接下来的小节中,我们分别介绍utf8和ascii两种常用类型的编码转换。
2.1 utf8编码转换
convert包提供了静态方法:encode
和decode
.通过这两个方法可以实现字符串与utf8编码之间的转换。下面是这两个方法的函数原型:
/// The input is encoded as if by `encoder.convert`.
T encode(S input) => encoder.convert(input);
/// Decodes [encoded] data.
///
/// The input is decoded as if by `decoder.convert`.
S decode(T encoded) => decoder.convert(encoded);
这个是抽象类Codec中的方法,实现类会实现这些抽象方法,下面是Utf8Decoder
这个实现类对conver方法的实现:
String convert(List<int> codeUnits, [int start = 0, int? end]) {
// Allow the implementation to intercept and specialize based on the type
// of codeUnits.
var result = _convertIntercepted(_allowMalformed, codeUnits, start, end);
if (result != null) {
return result;
}
return _Utf8Decoder(_allowMalformed).convertSingle(codeUnits, start, end);
}
感兴趣的看官可以分析一下源代码的含义,不感兴趣的可以跳过源代码,直接使用包中的方法就可以。
2.2 ascii编码转换
convert包提供了静态方法:encode
和decode
.通过这两个方法可以实现字符串与ascii编码之间的转换。这现个方法的函数原型在上一个小节中介绍过,不过它的实现内容在AsciiCodec
这个实现类中,我们在这里不列出了,大家可以查看官方的源代码文件。
3. 示例代码
import 'package:convert/convert.dart';
void main(List<String> args) {
// Creates a Codec that converts a UTF-8 strings to/from percent encoding
final fusedCodec = utf8.fuse(percent);
final input = args.isNotEmpty ? args.first : 'ABC 123 @!(';
print(input);
final encodedMessage = fusedCodec.encode(input);
print(encodedMessage);
final decodedMessage = fusedCodec.decode(encodedMessage);
assert(decodedMessage == input);
}
上面的示例代码演示了字符串与utf8编码之间的转换,大家从中可以看到encode和decode方法的使用方法。该代码来自官方文档,建议大家自己动手去实践,通过运行程序来查看程序的运行结果。
此外,代码中没有演示字符串和ascii编码之间的转换,不过它的用法和示例代码中的十分相似,因此我们不再举例说明。
4. 内容总结
最后,我们对本章回中的内容做一个全面的总结:
- 我们可以使用convert包来转换字符串的编码方式;
- 包中支持常用的字符方式,比如ascii编码和utf-8编码;
- 包中的转换方法主要有两个:encode和decode,它们都是静态方法;
看官们,与"convert包"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!