1.emoji表情符号应用场景及遇到的问题

emoji表情符号使用的场景:前端页面将用户带有emoji表情符号的留言发送给后端保存后,前端页面从后端获取留言再次展现。但是到再次从后端获取留言展示时,emoji表情符号不能正确展示。估计是后端数据库字符集不能兼容emoji表情符号,保存失败。emoji表情符号绝大部分(只有几个特殊的表情占2个字节除外)占用4个字节存储。

2.前端解决方案

在这里只介绍前端解决方案。解决思路:在前端发送请求前,将emoji表情符号转换成Unicode码点,再发送到后端;从后端获取的emoji表情符号的Unicode码点,再转换成emoji表情符号进行展示。
  思路解释:通过思考和查资料测试,感觉将emoji表情转换为Unicode码点发送到后端保存比较适合应用场景。此时问题解决的关键点就是emoji表情符号与对应的Unicode码点之间的相互转换问题。

3.JavaScript内置编码方式

前端html页面字符集编码为utf-8,这种编码方式是一种变长的编码方式,它可以使用1-4个字节表示一个符号(字符),根据不同的符号而变化字节长度,故前端页面纯粹展示表情符号是没有问题的(emoji表情符号绝大部分(只有几个特殊的表情占2个字节除外)占用4个字节存储)。
JavaScript语言采用Unicode字符集,内部存储字符使用的utf-16(实际是usc-2,是utf-16的子集)编码方式。Utf-16编码方式,结合了定长和变长两种编码方式的特点,其编码长度要么是2个字节,要么是4个字节。经过测试, ES5中的String.prototype.charCodeAt(index)和String.fromCharCode(unicode)只能处理2个字节的字符,而 ES6 的String.prototype.codePointAt(index)和String.fromCodePoint(unicode)两个字符串函数则能处理4个字节的字符。问题解决。

4.带有emoji表情符号的字符串转换为Unicode码点字符串

function EmojiExchangeString() {let str2 = document.getElementById('shuru').value;let str2Arr = [];str2.split('').map((val,index)=>{str2Arr.push(val.codePointAt(0))})document.getElementById('chartlist').value = str2Arr.join(',');
}

5.Unicode码点字符串转换为带有emoji表情符号的字符串

function StringExchangeEmoji(){let str3 = document.getElementById('chartlist').value;let str3Arr = str3.split(',');str3Arr.map((val, index)=>{str3Arr[index] = Number(val);})console.log(str3Arr)document.getElementById('emojilist').value = String.fromCodePoint(...str3Arr);return result;
}

6.案例代码

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>emoji表情符号与Unicode码点转换</title><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
</head>
<body><div><input type="text" placeholder="请输入表情符号测试" id="shuru"><br><button onclick="EmojiExchangeString()">emoji表情转换成unicode码点</button><br><button onclick="StringExchangeEmoji()">unicode码点转换成emoji表情</button></div><div><input type="text" placeholder="unicode码点" id="chartlist"><br><input type="text" placeholder="emoji表情" id="emojilist"></div><script type="text/JavaScript">function EmojiExchangeString() { let str2 = document.getElementById('shuru').value;let str2Arr = [];str2.split('').map((val,index)=>{str2Arr.push(val.codePointAt(0))})document.getElementById('chartlist').value = str2Arr.join(',');}function StringExchangeEmoji(){let str3 = document.getElementById('chartlist').value;let str3Arr = str3.split(',');str3Arr.map((val, index)=>{str3Arr[index] = Number(val);})console.log(str3Arr)document.getElementById('emojilist').value = String.fromCodePoint(...str3Arr);return result;}</script>
</body>
</html>

emoji表情符号有时不能正常显示的问题的解决方案相关推荐

  1. Emoji表情符号兼容方案(适用ios,android,wp等平台)

    http://blog.csdn.net/qdkfriend/article/details/7576524 Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号:词义来自日语(え ...

  2. 前端如何处理emoji表情符号

    前端页面将用户带有emoji表情符号的留言发送给后端保存后,前端页面从后端获取留言再次展现.但是到再次从后端获取留言展示时,emoji表情符号不能正确展示. 我就奇怪了,emoji表情也是文本内容,怎 ...

  3. Emoji表情符号兼容方案

    一 什么是Emoji emoji就是表情符号:词义来自日语(えもじ,e-moji,moji在日语中的含义是字符) 表情符号现已普遍应用于手机短信和网络聊天软件. emoji表情符号,在外国的手机短信里 ...

  4. 匿名处理和emoji表情符号处理

    匿名处理 今天对用户名称进行匿名处理,但是用户名称中可能包含emoji表情符号,先附上匿名处理的方法 //1.用户+id正常显示:2.大于2个字,前后保留一个字,例如 小***吐:3.小与等于2个字, ...

  5. UITextView UITextField 检测并过滤Emoji表情符号

    这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己 ...

  6. 【iOS开发每日小笔记(七)】UITextView UITextField 检测并过滤Emoji表情符号

    这篇文章是我的[iOS开发每日小笔记]系列中的一片,记录的是今天在开发工作中遇到的,可以用很短的文章或很小的demo演示解释出来的小心得小技巧.它们可能会给用户体验.代码效率得到一些提升,或是之前自己 ...

  7. Android 禁止输入emoji表情符号

    转至: http://blog.csdn.net/baiyuliang2013/article/details/43982647 最近在项目中遇到了一个问题,找了半天原因,最后发现是用户在昵称中输入了 ...

  8. 适用ios,android,wp等平台手机emoji表情符号兼容方案

    一 什么是Emoji emoji就是表情符号:词义来自日语(えもじ,e-moji,moji在日语中的含义是字符) 表情符号现已普遍应用于手机短信和网络聊天软件. emoji表情符号,在外国的手机短信里 ...

  9. Emoji表情符号兼容方案(转)

    一 什么是Emoji     emoji就是表情符号:词义来自日语(えもじ,e-moji,moji在日语中的含义是字符) 表情符号现已普遍应用于手机短信和网络聊天软件. emoji表情符号,在外国的手 ...

最新文章

  1. SQL Server存储过程输入参数使用表值
  2. Opensmile 简介
  3. k8s部署etcd数据库集群
  4. Max Sum 杭电 1003
  5. android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升
  6. C#趣味程序---理财高手
  7. 《C++ Primer》7.1.3节练习
  8. O(V*n)的多重背包问题
  9. [深度学习-优化]欠拟合与过拟合以及解决方法
  10. ACdream 1148(莫比乌斯反演+分块)
  11. uoml文档交换服务器,文档处理系统和方法
  12. stm32中断方式和DMA方式完成串口通信
  13. 影响下载速度的因素--总结
  14. 微信公众号二维码在哪里看?如何查看自己的微信公众号二维码?
  15. java交通调度,java毕业设计_springboot框架的的车辆调度管理系统
  16. Package XXX is not configured yet
  17. description The server encountered an internal error that prevented it from fulfilling this request错
  18. 金蝶软件怎么过账_超详细!金蝶财务软件实操流程
  19. 密码爆破工具:Medusa(美杜莎)-操作说明hydra-操作说明
  20. USB 基本知识(一)

热门文章

  1. 【Rust日报】2019-10-01 - Shawl: 一个能够将一切应用程序运行为Windows服务
  2. Android Fonts
  3. Android实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
  4. Flutter TabBar
  5. 江苏计算机设计大赛2018,附件12018年江苏省大学生计算机设计大赛校级选拔赛大赛内.doc...
  6. [该死的GIT]七个你无法忽视的 Git 使用技巧
  7. HDU 5445 Food Problem(多重背包)
  8. win10下docker搭建fastDFS
  9. 40000字!全网最强Matplotlib实操指南!
  10. wps文字退格会删掉文字_WPS加字时总是把后面的字删除,如何解决?