Android:向不同运营商发送短信(@翻译成?)

标签 android unicode sms gsm smsmanager

我在向不同运营商发送 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。无需将 String 转换为 UTF-8 编码的 byte[] 数组,然后再次转换回 String(特别是因为您没有正确进行最后一次转换)。完全摆脱 getBytes() 并按原样使用 "@":

String message = "@";
manager.sendTextMessage(phonenumber, null, message, piSend, piDelivered);

或者简单地说:

manager.sendTextMessage(phonenumber, null, "@", piSend, piDelivered);

在使用 sendDataMessage() 时使用 getBytes() 确实有意义。

更新:经过一些研究,我发现 SMS 可以使用三种不同字符编码中的一种。在 GSM-03.38编码,@ 字符通常编码为八位字节 0x00,而不是八位字节 0x40,就像在标准 ASCII 兼容字符集中一样。因此,如果您的设备在内部使用 GSM 编码,这可能会给您的运营商带来一些问题。如果您的设备没有自动为您处理(我希望 Android在内部处理,但谁知道它是否真的如此)。如果您想发送国际字符或其他非字母数字字符,您可能无论如何都必须这样做:

manager.sendDataMessage(phonenumber, null, 8091, message.getBytes("UTF-16"), piSend,     

pi已交付);

关于Android:向不同运营商发送短信(@翻译成?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23505482/

相关文章:

qt - qt 应用程序中的 Unicode 字符不显示

php - 希伯来语字体未显示

javascript - 如何在编程短信中包含 FaceTime 号码的 URL/链接

java - 将 android 设备连接到在我的 PC 上运行的 Tomcat 服务器

java - 如何在 Android 中将 pdf 附加到发送 Intent (发送到电子邮件、保管箱等)

android - Toasts 在 4.4.2 中停止工作

android - 突出显示 TextView 中的文本

python - scrapy:请求url必须是str或unicode得到列表

sms - 以编程方式从 Linux 发送短信

android - 短信 ContentObserver 的处理程序