4字节emoji表情对应的Unicode编码获取和编码转换GitHub Flavored Markdown
今天研究了⼀天Markdown移动端和pc端统⼀实现⽅式,由于以前有搞过移动端富⽂本编辑器,搞Markdown简单多了;
其中GFM的表情语法不错,⽐如笑脸:smile:,准备采⽤⼀下。
⼜想到了⼿机输⼊法输⼊表情浏览器页⾯接收到的是⼀个字符,如果能转换成:smile:就更能统⼀表现了,就像Android怎么输⼊输⼊法⾥⾯奇丑的emoji到了⾥⾯都是⾃带的好看的emoji图标,其实这个转换好⼏年前就有开始了解,不过没有什么进展。
编码问题
前⼏天刚好有需求要把emoji对应的Unicode编码转换成⽂字,⽐如1f601对应的这个笑脸 ,但没有到C#的把1f601转换成⽂字的⽅法,
⽤Encoding.Unicode怎么转换都不对,最后直接复制emoji字符,Visual Studio⾥⾯竟然直接显⽰出来了,那就直接⽤字符吧,都不⽤转换了,然后不了了之了。
正确姿势
【C#】Encoding.UTF32.GetBytes(" ")->["1", "f6", "1", "0"]
代码转换【js】" ".codePointAt(0).toString(16)->1f601
UTF-32结果⼀致
【C#】Encoding.UTF8.GetBytes(" ")->["f0", "9f", "98", "81"]
【js】encodeURIComponent(" ")->%F0%9F%98%81
UTF-8结果⼀致
错误姿势
【C#】Encoding.Unicode.GetBytes(" ")->["3d", "d8", "1", "de"]
【js】" ".codePointAt(0).toString(16)->1f601
这个Unicode反⽽不⼀致了
其实前段时间⼀直转换不对,就是错怪Encoding.Unicode了,C#⾥⾯Encoding.Unicode=Little-Endian UTF-16
没错是UTF-16,四字节编码⽼实⽤UTF-32就和浏览器结果⼀致了。
好开森,记录嘚瑟⼀下
Java是不是这样就搞不清楚了,电脑内存⼩了点就不开Eclipse敲代码了。
有了正确的转换关系,不管前端对⽤户输⼊进⾏替换还是后端替换都能实现了。下⼀步制作GFM emoji名字和Unicode编码对照表,挑⼏⼗个emoji放到编辑器菜单,剩余的只提供图⽚。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论