解决短信乱码问题:iPhone和Android的对策
最近收到一条奇怪的消息,内容是“y@e@s@”,看起来像是emoji导致了字符乱码的问题。以下是我遇到的情况,以及如何解决这一问题的一些建议。
1. 文本错误来源分析
在某些情况下,发送时所使用的原始字符编码可能会被应用程序或信息提供商误解,从而导致不同的解码方式(如:GSM.03.38 使用7位/字节,而UTF-16使用2字节)。这会导致文本以混乱的方式显示。例如,“真棒”会以"\ud83d\ude00"
的形式发送,而在某些地方被解释成了2个单独的字符,并在转换回为普通文字时出现问题。
举一个经典的例子,《微软“<em>布什隐瞒事实</em>”漏洞》描述了这种情况的一个极端情况。这是因为使用了emoji或其他非ASCII文本所导致的问题。
2. 情况分析
在我遇到的情况下,可能是因为将GSM.03.38编码误解读成了UTF-16编码,尤其是在包含emoji的时候。
以下是几个详细的步骤来解决这个问题:
– 如果您是接收方:尝试更换发送文本的软件应用。若问题仍旧存在,请考虑使用在线服务进行转换(例如 http://string-functions.com/encodedecode.aspx ),设置为 “UTF-16” 解码为 “UTF-8” 看看是否能够恢复正常。
- 如果您是发送方:避免在短信中使用emoji表情符号。或者在某些应用如Google Messenger中将其关闭:“先进”设置—“复杂字符仅限”选项开启即可防止特殊符号被转换成短信格式。
3. 进一步阅读
- https://www.nowsms.com/emoticons 现今短信:如何在短信消息里使用emoji表情符号。
- https://support.swiftkey.com/hc/en-us/articles/201458012-Why-do-emoji-on-Android-take-up-more-than-one-character/?amp 为什么Android文本框输入时显示的emoji字符会超出一个?
小结
最近,苹果iPhone用户在论坛中遇到了此类问题;一些情况下,@符号被插入到字母之间使文本以UTF-16LE进行编码,导致如“y@e@s@”这样看起来正常的文本,但在另一些程序中却变成了无法理解的字符,如“䁙”,这种现象可能是由于iOS更新而发生的。
此外,有用户报告过一个可能的修复方法:联系运营商请求重置sms路由服务;不过这个信息尚未经过验证。希望这能帮助遇到此类问题的朋友解决他们的麻烦!