32.APP后端处理表情的一些技巧

2023-05-16

app应用中文字夹带表情是个很常见的现象。甚至一些40多岁的大叔级用户,也喜欢在自己的昵称中夹带表情,在产品运营后发现这个现象,彻底颠覆了我的世界观。

 

在后台处理表情的时间,我遇到过下面3个问题:

 

1.表情在mysql的存储

 

         表情的utf8编码,有时是有4个字节的,所以在一般的utf编码是没法存储的。

 

在网上看到一个常用的解决方案,是把mysql升级到5.5,然后把字符编码改为utf8mb4_general_ci。

 

但实际情况是,有可能在以前的app版本中不需要支持表情,这时系统已经运营了一段时间了,这时才把mysql升级并迁移数据,需要很高的运维成本,同时具备一定的风险,例如,迁移前的不同mysql版本间需要数据同步,保证数据的一致性;迁移过程中可能出现意想不到的事情,造成服务停止。

 

但在实践中,我发现了还有一个方法,适用于mysql 5.1,就是把含有表情的那个字段的类型变为blob, 没错,就是用二进制存储,这样就能比较少的改动mysql。

 

2.当文字中夹带表情的处理

 

   很多时候,如果文字中夹带表情,那么这些文字的处理就会出现问题,例如,如果一个用户的昵称带有表情,那么我怎么把这个昵称转换为拼音呢?在推送apns过程中,如果推送的文字中夹带表情,推送到app端后也会显示乱码。

        

在app后端,存在着大量要处理文字中夹带表情的需求。我遇到了这个问题,先是找到了 https://github.com/iamcal/php-emoji这个转换表情的类库,但发现这个类库不支持ios6后新增的表情,最后没办法了,我写了个抓取程序,把 http://punchdrunker.github.io/iOSEmoji/table_html/ios6/index.html中ios6后新增的表情抓取出来,并写了个新的类库并开源了 https://github.com/newjueqi/converemojitostr,这个类库的作用就是把文字中夹带的表情替换为一个特殊的字符(默认是"#")。

 

3.openfire中发送表情引起断开连接的问题

 

openfire中,如果发送某些特殊的字符(例如一些表情符合),会断开xmpp的连接,经查,是由以下的代码问题引起的:

 

src\java\org\jivesoftware\openfire\net\MXParser.java

 

protected char more() throws IOException, XmlPullParserException {
    	final char codePoint  = super.more(); // note - this does NOT return a codepoint now, but simply a (single byte) character!
		if ((codePoint == 0x0) ||  // 0x0 is not allowed, but flash clients insist on sending this as the very first character of a stream. We should stop allowing this codepoint after the first byte has been parsed.
				(codePoint == 0x9) ||          				     
				(codePoint == 0xA) ||
				(codePoint == 0xD) ||
				((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
				((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) ||
				((codePoint >= 0x10000) && (codePoint <= 0x10FFFF))) {
			return codePoint;
		}
		
		throw new XmlPullParserException("Illegal XML character: " + Integer.parseInt(codePoint+"", 16));
    }


        

        

由于在这里把特殊的字符当成了一个异常,所以openfire会断开连接。

 

解决方法:

 

 @Override
    protected char more() throws IOException, XmlPullParserException {
    	final char codePoint  = super.more(); // note - this does NOT return a codepoint now, but simply a (single byte) character!
		if ((codePoint == 0x0) ||  // 0x0 is not allowed, but flash clients insist on sending this as the very first character of a stream. We should stop allowing this codepoint after the first byte has been parsed.
				(codePoint == 0x9) ||          				     
				(codePoint == 0xA) ||
				(codePoint == 0xD) ||		
				//fix some emotion
				((codePoint >= 0x20) && (codePoint <= 0xFFFD)) ||				
				((codePoint >= 0x10000) && (codePoint <= 0x10FFFF))) {
			return codePoint;
		}
		
		throw new XmlPullParserException("Illegal XML character: " + Integer.parseInt(codePoint+"", 16));
    }	


----------------------------------------------------------

        本人把网络上发表的一系列“app后端”文章加以整理并增加了运维和架构方面的内容,出版了书籍《App 后台开发运维和架构实践》,该书已在京东,当当和亚马逊上销售。

《App后台开发运维和架构实践》的购买链接

京东

京东 
当当 
亚马逊 
互动出版网 
天猫



-------------------------------------------------------------------------------------------------

打开链接  app后端系列文章总目录 总目录 ,能查看本人发表过的所有原创“app后端”文章。

【作者】曾健生
【QQ】190678908
【app后端qq群】254659220 
【微信公众号】 appbackend
【新浪微博】 @newjueqi
【博客】http://blog.csdn.net/newjueqi 




 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

32.APP后端处理表情的一些技巧 的相关文章

  • 2. 网友对app后端写作系列文章的写作建议

    很感谢 app 后端 qq 群的网友 xff0c 在发布消息后 xff0c 就收到了大量网友的反馈 下面的建议会融入到写作当中 xff1a 1 还有 xff0c 对版本升级很感兴趣 xff0c 我们现在为了兼容旧版本 xff0c 已经把工程
  • 3.对经历过的创业项目的总结

    在传统的计算机行业 xff0c 做一个产品先做需求分析 xff0c 然后做设计 xff0c 划分里程碑 xff0c 最后测试 xff0c 上市 但在移动互联网行业 xff0c 这种做产品方法要不得 移动互联网变得太快了 xff0c 有可能之
  • 4.app是怎么炼成的

    很多刚进入app后端的小伙伴 xff0c 有的是之前没有接触过这个行业 xff0c 有的是只在学校学习了基本的技术知识 xff0c 不知道开发app的整个流程是怎么样的 xff0c 因此心里会有一股恐惧 听着别人口中的一大串app相关的术语
  • 5.两分钟让你明白app后端有啥用

    app后端 xff0c 也称为app后台 xff0c 称呼不一样 xff0c 但指的是同一个东西 我一直都以app后端有啥用这个问题不用解释 但在网络上 xff0c 有准备进行app创业的网友 xff08 是从传统行业过来的 xff09 问
  • 6.app架构基础

    app架构 xff0c 一个听起来高大尚的名字 xff0c 很多小伙伴听到这个词语感觉很迷茫 xff0c 不知道架构具体说的是啥 xff1f 在 xff51 群里 xff0c 34 app后端应该怎么架构 34 这个问题被问了无数次 通过阅
  • MSCKF

    主要数据结构 xff1a StateServer当前里程计状态 imu状态 若干相机位姿 状态协方差矩阵 噪声协方差 struct StateServer IMUState imu state CamStateServer cam stat
  • 7.app和app后端的通讯

    经常有开发者问 xff1a app和后端通讯是用http协议还是私有的协议 xff1f 是用长连接还是短连接 xff1f 通过阅读本文 xff0c 帮你解除上面的疑问 xff08 1 xff09 是用http协议还是私有的协议 xff1f
  • 8.app后端和web后端的区别

    很多从web后端转到app后端的小伙伴经常很茫然 xff0c 不知道这两者之间有啥区别 本文通过例子 xff0c 分析web后端和app后端的区别 xff0c 使各位更好地把握app后端的架构 1 app后端要慎重考虑网络传输的流量 xff
  • 9.app后端选择什么服务器

    对于很多刚入行的朋友来说 xff0c 不清楚应该选择什么样的服务器提供商 xff0c 是选择传统的IDC 租用服务器租用机柜 xff0c 还是选择现在很火的云服务器呢 xff1f 在本文中 xff0c 通过对比传统的IDC和云服务 xff0
  • 10.app后端选择什么开发语言

    在qq上 xff0c 经常看到有创业团队的创始人一直都招不到技术人员 xff0c 除了项目的因素外 xff0c 很大的原因就是所需要掌握的开发语言偏门 通过阅读本文 xff0c 详细了解选择开发语言的核心原则 xff0c 使各位心里对开发语
  • 11.如何快速进门新技术

    在app后端的工作中 xff0c 经常会接触到新的技术 作为一名后端人员 xff0c 面对开发的压力 xff0c 快速地入门新的技术 xff0c 融入到项目当中 xff0c 这已经成了一个后端人员的必备技能 在这篇文章 xff0c 根据总结
  • 12.app后端如何选择合适的数据库产品

    app后端的开发中 xff0c 经常要面临的一个问题是 xff1a 数据放在哪里 mysql xff1f redis xff1f mongodb xff1f 现在有这么多优秀的开源数据库产品 xff0c 怎么根据业务场景来选择合适的数据 常
  • 13.app后端为什么要用到消息队列

    很多没有实际项目经验的小伙伴 xff0c 对消息队列系统非常陌生 xff0c 看着很多架构的介绍中 xff0c 都提到消息队列 但是 xff0c 不知道为什么要用消息队列 xff1f 什么是消息队列 xff1f 常见的消息队列产品有哪些 x
  • 14.app后端如何设计api

    app和后端的交互 xff0c 一般都是通过后端提供的api实现 api的设计 xff0c 估计很多刚进入app后端的小伙伴会一无头绪 xff0c 不知道怎么入门 下面根据自己3年的app后端经验 xff0c 总结出下几个api设计原则 x
  • 15.app后端怎么设计用户登录方案

    在很多app中 xff0c 都需要用户的登录操作 登录 xff0c 就需要用到用户名和密码 为了安全起见 xff0c 暴露明文密码的次数越少越好 怎么能最大程度避免泄露用户的密码呢 xff1f 在登录后 xff0c app后端怎么去验证和维
  • Struts 1 中DispatcherAction类原理浅析

    文章标题 Struts 1 中 DispatcherAction 类原理浅析 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者声明 本人水平有限 xff0c 失误之处 xf
  • Python 高级编程技巧 第二讲 内置不可变类型并修改其实例化行为、slots属性、contextmanager上下文管理器、创建可管理对象属性、类比较操作

    第二讲 一 如何派生内置不可变类型并修改其实例化行为 这里有一道练习题 xff0c 我们想定义一个新类型的元组 xff0c 对于传入的可迭代对象 xff0c 我们只保留其中int类型并且值还要大于0 或许我们可以这么写 xff0c 尝试一下
  • 16.app后端如何保证通讯安全--url签名

    app和后端的通讯过程中 xff0c api请求有可能被别人截取或不小心泄露 那么 xff0c 怎么保证api请求的安全呢 xff1f 在这篇文章中 xff0c 介绍一种常见的保证api请求安全的做法 url签名 1 url签名详解 在前一
  • 17.app后端如何保证通讯安全--aes对称加密

    在上文 16 app后端如何保证通讯安全 url签名 提到 xff0c url签名有两个缺点 xff0c 这两个缺点 xff0c 如果使用对称加密方法的话 xff0c 则完全可以避免这两个缺点 在本文中 xff0c 会介绍对称加密的具体原理
  • 18.app后端如何实现LBS

    移动互联网 xff0c 除了一直在线这个特点外 xff0c 还有一个重要特点 xff0c 能定位到手机的位置 查找附近的人 附近的餐馆等服务 xff0c 以及大量的o2o应用 都需要使用LBS Location Based Services

随机推荐

  • 19.最省钱的app发短信方法

    在创业团队中 xff0c 一个重要的原则是能省就省 xff0c 该花就花 xff0c 把银子用在刀刃上 现在的app xff0c 为了获取用户的社交关系 xff0c 需要用户的手机号注册 用手机号注册就涉及到一个发送短信验证码的问题 xff
  • 20.如何从app业务逻辑提炼api接口

    在app后端的工作中 xff0c 设计api是一个很考验设计能力的工作 在项目的初始阶段 xff0c 只知道具体的业务逻辑 xff0c 那怎么把业务逻辑抽象和提炼 xff0c 设计出api呢 xff1f 通过阅读本文 xff0c 可解答以上
  • 21.app后端如何高效更新内容

    在app的主页或通知栏 xff0c 经常需要通过api取最新的数据 那么 xff0c 怎么在这部分上做优化 xff0c 使获取内容的效率更高呢 xff1f 在本文中 xff0c 通过推拉和增量更新 xff0c 实现了一种高效获取数据的策略
  • 22.在创业公司中的成长

    在 app后端 qq群中 xff0c 经常被问到的一个问题 xff1a 怎么设计一个应付高并发的架构 诚然 xff0c 设计一个能应付百万流量的高并发架构 xff0c 是很令人兴奋的技术挑战 xff0c 但在创业公司中的成长 xff0c 难
  • 23.app后端如何架设文件系统

    现在app展现内容的形式多种多样的 xff0c 有文字 xff0c 图片 xff0c 声音 xff0c 视频等等 xff0c 其中文件占了一个很大的比重 随着app不断运营 xff0c 文件会越来越多 xff0c 占用的磁盘空间也不断增大
  • 24.从公众号筹集10万股份学到的商业化思维

    1 忽然间看到了卖公众号的股份的玩法 昨天 xff0c 在公众号 老鹰说 id joeytalks 看到了他要弄一个新的玩法 xff0c 卖公众号的股份 xff0c 熟人1000块一股 xff0c 陌生人2000块一股 当时不以为然 xff
  • 25.创业真的需要app吗?真的需要外包吗?

    两个星期前 xff0c 一名亲戚的朋友打算投入自己的二十多万元去搞个摄影社交app xff0c 问我有没有靠谱的外包推荐 xff0c 我赶紧劝住他 xff0c 现在app的成本已经非常高了 xff0c 初期的研发就要十几万 xff0c 加上
  • HarmonyOS鸿蒙的测试体验

    HarmonyOS 2 0手机开发者Beta公测招募 xff0c 申请开发者账号 xff0c 报名 xff0c 就可以抢先体验 除了抢先体验 xff0c 使用真机测试外 xff0c 使用模拟器也可以尝试体验 那测试人员可以使用HVD和Clo
  • 单点登录 Ucenter 分析

    原文 xff1a http blog csdn net ebw123 article details 9417231 首先我们先来了解下 Ucenter登录步骤 1 用户登录discuz xff0c 通过logging php文件中的函数u
  • 当Ucenter和应用通信失败

    http blog sina com cn s blog 775f158f010135uz html 失败是常见的 对于初次接触Ucenter的人来讲 xff0c 添加一个自己的应用最头疼的就是发现通信失败 如果要解决这个问题 xff0c
  • 26.app后端怎么架设推送服务

    推送服务已经是app的标配了 架设推送服务 xff0c 除了可以使用第三方服务商外 xff0c 也有大量的开源技术可以选择 现在推送主要分两块 xff0c android推送和ios推送 xff0c 在下面分别论述 xff1a 1 Andr
  • 27.app后端搭建聊天服务器的经历

    现在 xff0c 聊天功能已经成了社交app的标配了 但是 xff0c 众多web开发出生的程序员对聊天相关的服务的不了解 xff0c 带来了很多开发上的困扰 在这篇文章中 xff0c 根据下面3个方面 xff0c 谈谈聊天服务 1 聊天服
  • 29.满大街创业团队的年代,一不小心就被忽悠

    长期呆在创业团队中 xff0c 我人品不咋的 xff0c 遇到过各种坑人的项目和团队 下面讲讲3件坑人的事情 1 不靠谱的项目 在第二个创业项目失败后一个星期 xff0c 以前的UI andy忽然找上我 xff0c 有个老板想投资个项目 x
  • (转)cookie和session机制之间的区别与联系

    出处为中国JAVA手机网 lt www cnjm net gt http www cnjm net tech article1113 html 具体来说cookie机制采用的是在客户端保持状态的方案 它是在用户端的会话状态的存贮机制 xff
  • 30.因为绘画,我在豆瓣上认识了老婆

    导读 xff1a 这篇文章的上半部分 xff0c 是我2011年在豆瓣上发表的 五天学会绘画 书评 xff0c 我和老婆就相识于这个书评 后记部分 xff0c 是对绘画 xff0c 和用互联网方法找女友的一些思考 五天学会绘画 xff0c
  • 对太极拳中的“势”有所领悟

    文章标题 对太极拳中的 势 有所领悟 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 今天帮一个亲戚搬杂物 xff0c 从三楼的杂物房搬到一楼的花园 开始领悟 势 是搬一个很重
  • 本人写的Android上RSS阅读器简单介绍

    文章标题 本人写的 Android 上 RSS 阅读器简单介绍 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 个人博客 http blog csdn net newjueqi
  • 整合 ucenter 注册自动激活

    http my oschina net banbo blog 311691 应用整合 UCenter xff0c 同步注册到 Discuz 的用户 xff0c 在 Discuz 登录时得手动激活 xff0c 用户体验很不好 xff0c 不过
  • switch case语句用法详解

    switch 开关 的意思 xff0c 是一种 选择 语句 xff0c 它用法非常简单 switch 是多分支选择语句 说得通俗点 xff0c 多分支就是多个 if语句的组合 从功能上说 xff0c switch 语句和 if 语句完全可以
  • 32.APP后端处理表情的一些技巧

    app应用中文字夹带表情是个很常见的现象 甚至一些40多岁的大叔级用户 xff0c 也喜欢在自己的昵称中夹带表情 xff0c 在产品运营后发现这个现象 xff0c 彻底颠覆了我的世界观 在后台处理表情的时间 xff0c 我遇到过下面3个问题