我想從模擬器發送短信到模擬器。它可以工作,但只能使用非常有限的字符集(ASCII子集)。如果我有任何以下字符的消息時,這些字符的第一次發生後,什麼將成爲gibrish:模擬器之間發送短信
|, ^, {, }, €, [, ~, ] 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」沒有接受的答案 - 你是否複製了「錯誤的代碼」 - 描述編碼問題.... – Cadburry
這也是我的問題。一開始我認爲這是接收方面的問題,現在看起來它甚至在發送。或者介於兩者之間......誰知道......我還向android提交了一個錯誤報告:https://code.google.com/p/android/issues/detail?id = 202723 – Gavriel
SMS使用了7位ASCII碼。這意味着只有非常基本的字符。你需要調用sendMultipartTextMessage來使它與unicode一起工作。 sendTextMessage不會發送特殊的配置數據來告訴運營商它不是7位ascii –