我在向不同的运营商发送SMS时遇到问题:“ @”被翻译为“?”。我的邮件使用UTF-8编码,我使用以下代码:
SmsManager manager = SmsManager.getDefault();
PendingIntent piSend = PendingIntent.getBroadcast(this, 0, new Intent(SMS_SENT), 0);
PendingIntent piDelivered = PendingIntent.getBroadcast(this, 0, new Intent(SMS_DELIVERED), 0);
String message = new String(new String("@").getBytes("UTF-8"))
manager.sendTextMessage(phonenumber, null, message , piSend, piDelivered);
谢谢!
笔记:
我尝试使用下面的代码,但出现了问题。在某些操作系统(例如Windows Phone 8)上,SMS从不发送。
manager.sendDataMessage(phonenumber, null, (short) 8091, message.getBytes(), piSend,
piDelivered);
的第三个参数sendTextMessage()
是普通的String
。无需将A转换String
为UTF-8编码的byte[]
数组,然后再转换回A String
(特别是因为您没有正确执行上一次转换)。getBytes()
完全摆脱掉,"@"
按原样使用:
String message = "@";
manager.sendTextMessage(phonenumber, null, message, piSend, piDelivered);
或者简单地:
manager.sendTextMessage(phonenumber, null, "@", piSend, piDelivered);
改为使用getBytes()
时确实有意义sendDataMessage()
。
更新:做一些研究,我发现SMS可以使用三种不同的字符编码之一。在GSM-03.38编码中,@
字符通常编码为octet 0x00
,而不是0x40
像标准ASCII兼容字符集那样编码为octet 。因此,如果您的设备内部使用GSM编码,则可能会对运营商造成一些问题。如果您的设备没有自动为您处理数据,则您可能不得不使用它sendDataMessage()
来将String
数据编码为UTF-16(我希望Android在内部处理该数据,但谁知道它是否确实可以处理)。如果要发送国际字符或其他非字母数字字符,则可能仍然需要这样做:
manager.sendDataMessage(phonenumber, null, 8091, message.getBytes("UTF-16"), piSend,
piDelivered);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句