【发布时间】:2016-03-07 15:16:16
【问题描述】:
我正在尝试从模拟器发送短信到模拟器。它可以工作,但只能使用非常有限的字符集(ASCII 子集)。如果我在消息中包含以下任何字符,那么在这些字符第一次出现之后的任何内容都会变成乱码:
|, ^, {, }, €, [, ~, ] and \
(但我还需要非 ASCII 字符,如希伯来字母)
例如,如果我发送Hello ^ World,它将变为Hello ^。
或者[Hello:World] 变成[ e ] 之类的东西
这是我使用的代码:
void sendSms(final String toNumber, final String message) {
final SmsManager sm = SmsManager.getDefault();
if (message.getBytes().length <= 160) {
sm.sendTextMessage(toNumber, null, message, null, null);
} else {
ArrayList<String> msgStringArray = sm.divideMessage(message);
sm.sendMultipartTextMessage(toNumber, null, msgStringArray, null, null);
}
Log.v(TAG, "sendSms: " + toNumber + ", " + message + ", " + message.length() + " chars / " + message.getBytes().length + " bytes");
}
我用来接收消息的代码在这里:Receive an read SMS with correct encoding and convert to UTF8
【问题讨论】:
-
“接收具有正确编码的已读短信并转换为 UTF8”没有可接受的答案 - 您是否复制了“错误代码” - 它描述了编码问题......
-
这也是我的问题。一开始还以为是接收的问题,现在看来竟然是发送了。或者介于两者之间......谁知道......我还向android提交了一个错误报告:code.google.com/p/android/issues/detail?id=202723
-
SMS 使用 7 位 ascii。这仅意味着非常基本的字符。您需要调用 sendMultipartTextMessage 以使其与 unicode 一起使用。 sendTextMessage 不会发送告诉运营商它不是 7 位 ascii 所需的特殊配置数据
-
@GabeSechan 不幸的是它也不起作用。我只是将上面代码中的 if 注释掉了,但它的行为完全一样。
-
谷歌搜索,我看到很多报告说它在模拟器上坏了,但在设备上工作。您是否尝试过使用真实设备进行完整性检查?
标签: android android-emulator sms