flutter中字符串如何转为字节数组bytes?

码云
2020-11-19 09:56

给定一个字符串,我们可以通过下面的方式将字符串转为字节数组:

String foo = 'Hello world';
//字符串转utf8
List<int> bytes = utf8.encode(foo);
print(bytes); //[72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]

//再将字节列表转字符串
String bar = utf8.decode(bytes);


//转utf16列表
bytes = foo.codeUnits;
print(bytes); //[72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]

//转unicode列表
print(foo.runes.toList()); //[72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]

//测试下中文以及表情的情况😊
foo="h😊好";

//字符串转utf8
bytes = utf8.encode(foo);
print(bytes); //[104, 240, 159, 152, 138, 229, 165, 189]

//转utf16列表
bytes = foo.codeUnits;
print(bytes); //[104, 55357, 56842, 22909]

//转unicode列表
print(foo.runes.toList()); //[104, 128522, 22909]

通过上面的例子可以发现:英文和数字的情况下转utf8 utf16 和unicode的结果都是一样的。

如果存在中文和表情符号,就会发现明显的差异。

utf8       : 英文占1位,中文占3位,表情占4位

utf16      : 英文占1位,中文占1位,表情占2位

unicode  : 英文占1位,中文占1位,表情占1位

全部评论