Dart 中的 codeUnits 属性 与 utf8.encode 函数
codeUnits property vs utf8.encode function in Dart
我有这个小代码:
void main(List<String> args) {
const data = 'amigo+/=:chesu';
var encoded = base64Encode(utf8.encode(data));
var encoded2 = base64Encode(data.codeUnits);
var decoded = utf8.decode(base64Decode(encoded));
var decoded2 = utf8.decode(base64Decode(encoded2));
print(encoded);
print(encoded2);
print(decoded);
print(decoded2);
}
输出为:
YW1pZ28rLz06Y2hlc3U=
YW1pZ28rLz06Y2hlc3U=
amigo+/=:chesu
amigo+/=:chesu
codeUnits
属性给出了一个不可修改的UTF-16编码单元列表,可以用utf8.decode
函数吗?或者 encoded2
应该使用什么函数?
做 base64Encode(data.codeUnits)
根本不是一个好主意,因为 base64Encode
编码 字节 ,而 data.codeUnits
不一定是字节。
在这里(因为字符串的所有字符的代码点都在 256 以下,所以它们甚至是 ASCII。)
在base64Encode
之前使用ut8.encode
是好的。它适用于所有字符串。
将 从 UTF-16 代码单元转换为 String
的最佳方法是 String.fromCharCodes
.
此处您使用的 base64Encode(data.codeUnits)
只有在 data
字符串仅包含最多 255 个代码单元时才有效。因此,如果您 假设 ,那么这意味着可以使用 latin1.decode
或 String.fromCharCodes
完成解码。
如果字符串仅包含 ASCII,则使用 ascii.decode
和 utf8.decode
也有效(它在此处执行此操作,但 base64Encode
后继不能保证)。
总之,不要base64Encode(data.codeUnits)
。在执行 base64Encode
之前将字符串转换为 bytes,然后使用反向转换将字节转换回字符串。
我试过了
print(utf8.decode('use âsmartâ symbols like â thisâ'.codeUnits));
得到这个
use “smart” symbols like ‘ this’
“和”是来自iOS键盘的智能字符
我有这个小代码:
void main(List<String> args) {
const data = 'amigo+/=:chesu';
var encoded = base64Encode(utf8.encode(data));
var encoded2 = base64Encode(data.codeUnits);
var decoded = utf8.decode(base64Decode(encoded));
var decoded2 = utf8.decode(base64Decode(encoded2));
print(encoded);
print(encoded2);
print(decoded);
print(decoded2);
}
输出为:
YW1pZ28rLz06Y2hlc3U=
YW1pZ28rLz06Y2hlc3U=
amigo+/=:chesu
amigo+/=:chesu
codeUnits
属性给出了一个不可修改的UTF-16编码单元列表,可以用utf8.decode
函数吗?或者 encoded2
应该使用什么函数?
做 base64Encode(data.codeUnits)
根本不是一个好主意,因为 base64Encode
编码 字节 ,而 data.codeUnits
不一定是字节。
在这里(因为字符串的所有字符的代码点都在 256 以下,所以它们甚至是 ASCII。)
在base64Encode
之前使用ut8.encode
是好的。它适用于所有字符串。
将 从 UTF-16 代码单元转换为 String
的最佳方法是 String.fromCharCodes
.
此处您使用的 base64Encode(data.codeUnits)
只有在 data
字符串仅包含最多 255 个代码单元时才有效。因此,如果您 假设 ,那么这意味着可以使用 latin1.decode
或 String.fromCharCodes
完成解码。
如果字符串仅包含 ASCII,则使用 ascii.decode
和 utf8.decode
也有效(它在此处执行此操作,但 base64Encode
后继不能保证)。
总之,不要base64Encode(data.codeUnits)
。在执行 base64Encode
之前将字符串转换为 bytes,然后使用反向转换将字节转换回字符串。
我试过了
print(utf8.decode('use âsmartâ symbols like â thisâ'.codeUnits));
得到这个
use “smart” symbols like ‘ this’
“和”是来自iOS键盘的智能字符