Rom*_*360 13 sms android mms special-characters
我已经观察了这个问题多年了,不知道它来自哪里.我担心这个错误在2011年的Android新版本中仍然可以观察到,我希望你能最终帮助我完全理解它,如果不能解决的话.
让我们考虑给定(真实)的情况.先生"A"正在使用索尼在其Xperia Arc(官方2.3.3)上的自定义短信/彩信应用程序.B先生在他的里程碑(Cyanogen 6.12,非正式2.2)上使用了Android短信/彩信堆栈应用程序.他们两个都使用法语Android(如果重要的话).
当A向包含特殊字符(如"ç","ê")的B发送短信时,B收到一条消息,其中这些字符被空格替换.像"é"这样的人物工作正常.当B将短信发送给A时,一切正常.当A向自己发送短信时,一切正常.
结论:这不是移动提供商的错,因为它以一种方式而不是另一种方式工作.
所以,我首先猜到了A的自定义应用程序出了问题.用B的手机上的apk替换它.一切都保持不变.我反编译了应用程序,我没有找到sms字符串编码的位置.我总结说这个bug不是来自应用程序,而是来自Android编码字符串的方式......
我跑了另一个测试:我写了一个只有标准字符的短信,类似于1.5个字符的250个字符.然后,我在短信中附加一个"ç".在A的电话上:柜台说消耗了10个字符.在B的电话上:柜台说短信现在需要3个短信:字符串大小加倍!
结论:在A的手机上,默认的字符集包括"ç".在B的手机上,当出现"ç"时,字符集会发生变化,每个角色需要两倍于原始空间.(或者我错过了什么?)
问题:为什么不同版本的Android没有使用相同的默认字符集?在Android上,这些默认字符集是否取决于rom,例如?我们可以在某处(在菜单中或直接在根电话上)配置/更改这些字符集吗?有另一种简单的方法来解决这个问题吗?
欢迎任何帮助,解释或经验:)
您正面临编码问题。从描述来看,“A”似乎正在以一种字符集发送数据,但不包含有关该字符集的信息。根本原因是要在两个系统之间传递扩展(非 ASCII)字符,它们必须就要使用的编码达成一致。如果限制为 8 位值,则系统同意使用相同的代码页。在 SMS 中,有一个用于 7 或 8 位编码的特殊 GSM 代码页,或者可以使用 UTF-16,它使用 2 个字节来表示每个字符。当您输入 250 个字符后跟一个扩展字符时,您所看到的内容将显示应用程序中发生的情况。SMS 消息的长度限制为 140 个八位位组。当您使用 8 位编码时,您的 250 个字符适合 2 条消息 (250 < 280),但是一旦添加“\xc3\xa7”,应用程序就会更改为使用 UTF-16 编码,因此突然间所有字符都占用 2 个八位字节,并且一条消息只能容纳 70 个字符。现在需要 3.5 条 SMS 消息才能传输整个消息。
\n\n在 Android 上,SMS 消息的解码是 SmsCbMessage.java 中的框架电话代码的一部分。它计算出消息正文的语言代码和编码。如果这是不正确的(消息是用英语代码页编码的,但使用法语扩展字符),那么您可能会出现奇怪的字符。
\n\n你是对的,这不是移动网络的问题。我怀疑这是电话 A 的消息应用程序,尽管 Android 可能无法正确识别有效短信的编码。我想知道 A 和 iPhone 或其他制造商的设备之间是如何工作的。
\n| 归档时间: |
|
| 查看次数: |
10426 次 |
| 最近记录: |