flutter[dart] utf16转unicode
项目中遇到了需要使用freetype工具取模中日韩和emoji等字符的场景, 其中遇到了一些关于取模调用的问题记录一下.
在Dart等常见语言中, emoji字符会占用两个字符长度, 取模的时候如果按照字符长度去获取unicode编码会将这些字符切分导致乱码. Dart语音提供了将字符串按照字符分割的方法:str.characters. 返回的类型可以通过codeUnits属性获取到字符对应的utf16编码数组.
以下为获取字符串unicodes的示例
/// 获取字符串每个字符
static List<int> str2unicodes(Sring str){
return str.characters
.map((e) => e.codeUnits)
.map((v) => utf162unicode(v.toList()))
.toList();
}
/// utf16转unicode
static int utf162unicode(List<int> utf8s) {
if (utf8s.length == 1) {
return utf8s[0];
} else if (utf8s.length == 2) {
int vh = (utf8s[0] - 0xD800) << 10;
int vl = utf8s[1] - 0xDC00;
return vh vl 0x10000;
}
return 0;
}
/// unicode转utf16
static List<int> unicode2utf16(int unicode) {
List<int> res = [];
if (unicode < 0 || unicode > 0x10ffff) {
print("error");
return res;
} else {
if (unicode < 0x10000) {
res.add(unicode);
} else {
unicode = unicode - 0x10000;
int vh = (unicode & 0xFFC00) >> 10;
int vl = unicode & 0x3ff;
res.add(0xD800 | vh);
res.add(0xDC00 | vl);
}
return res;
}
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbjejh
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13