【问题标题】:Android smsManager handling Grave accent characterAndroid smsManager 处理重音字符
【发布时间】:2019-11-05 08:01:26
【问题描述】:

例如,当消息中有重音时,我的 Android 短信应用程序中出现了一些奇怪的行为; smsTEXT = "如果您有兴趣,请尽快致电办公室。"

消息在单个 160 个字符的短信长度内,但是当我调用它时;

ArrayList<String> segments = smsManager.divideMessage(smsTEXT);

报告的消息部分数大于1,实际上是2

if (segments.size() > 1 ){
    smsManager.sendMultipartTextMessage(etc...)
    nSegments = segments.size();
} else {
    smsManager.sendTextMessage(etc...)
    nSegments = 1;
}

sendMultipartTextMessage 似乎可以在单个部分中完美地发送消息(带有 Grave 口音),而在所有其他方面,该应用程序都可以正常工作

如果我用撇号代替重音,size() 只报告一条消息,sendTextMessage 一次发送一条短信

如果我在消息中加入几个重音,size() 最多会报告 4 个段,虽然看起来 sendMultipartTextMessage 只发送一条短信

问题:Android smsManager.. 中的 Grave 口音有什么特别之处吗?

【问题讨论】:

    标签: android smsmanager android-sms


    【解决方案1】:

    Grave 不能用 7 位 ascii 表示(SMS 的默认设置)。这要求它以 16 位字符的形式发送,这将最大字符数减少了一半。因此,即使是一条短消息也需要 2 条 SMS。您将看到表情符号和其他非 ASCII 字符的相同行为。如果您查看在 Android 的消息之类的消息应用程序中发送一条显示文本中剩余字符的 SMS,您会看到只要添加一个非 ASCII 字符,它就会减半(或者如果将它放在中间一个文本,你会看到文本的数量猛增)。

    【讨论】:

    • 感谢@gabe-sechan 并且很好发现,我忘记了它不在 GSM 7 位默认字母表中,因为它是一个 ascii 可打印字符(与寻呼机一起使用),所以假设它没问题.这意味着必须始终调用divideMessage 以确定是调用sendTextMessage 还是sendMultipartTextMessage,除非这样的字符被其他字符替换。
    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2011-03-08
    • 2021-01-28
    • 1970-01-01
    • 2015-10-25
    相关资源
    最近更新 更多