Về cơ bản tôi có một ứng dụng làm việc gửi một tin nhắn SMS sau khi nhận được một tin nhắn SMS.Android: Unicode/Charset vấn đề khi gửi một tin nhắn SMS (sendTextMessage)
Tất cả mọi thứ hoạt động tốt, trừ khi văn bản SMS để gửi có "ký tự đặc biệt", tức là "é, à, í, ç", vv
Tôi đã thử nhiều thứ trong đó có charset chuyển đổi nhưng tôi chỉ đơn giản là không thể làm cho nó hoạt động ... msgText luôn luôn trở lại với các vấn đề mã hóa charset.
Đây là một phần trong đó thông điệp được gửi:
if (msgText.length() > 160) {
ArrayList msgTexts = sm.divideMessage(msgText);
sm.sendMultipartTextMessage(PhoneNumber, null, msgTexts, null, null);
} else {
try {
sm.sendTextMessage(PhoneNumber, null, msgText, null, null);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
Dưới đây là các chức năng chuyển đổi charset tôi đã cố gắng (nhưng không hiệu quả), mà tôi áp dụng trên msgText:
public static String formatCharset(String txtInicial) {
//-- Please notice this is just for reference, I tried every charset from/to conversion possibility. Even stupid ones and nothing helped.
/*try {//-- Seems simpler, it should do the same as below, but didn't help
msgText = new String(msgText.getBytes("UTF-8"), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}*/
Charset charsetOrigem = Charset.forName("UTF-8");
CharsetEncoder encoderOrigem = charsetOrigem.newEncoder();
Charset charsetDestino = Charset.forName("ISO-8859-1");
CharsetDecoder decoderDestino = charsetDestino.newDecoder();
String txtFinal = "";
try {
ByteBuffer bbuf = encoderOrigem.encode(CharBuffer.wrap(txtInicial));
CharBuffer cbuf = decoderDestino.decode(bbuf);
txtFinal = cbuf.toString();
} catch (CharacterCodingException e) {
e.printStackTrace();
}
if (txtFinal.length() == 0) txtFinal = txtInicial;
return txtFinal;
}
gần tuyệt vọng Tôi thậm chí đã thử giải pháp cho nhắn tin unicode ở đây (cũng không hữu ích):
http://since2006.com/blog/android-send-unicode-message/
Dù sao, đây là (dọn dẹp - gói là com.THE.APPLICATION, hoạt động chính là MAINACT) LogCat khi nó bị treo (khi cố gắng gửi tin nhắn, sau khi nhận được một):
WARN/dalvikvm(28218): threadid=1: thread exiting with uncaught exception (group=0x4001d7f0) ERROR/AndroidRuntime(28218): FATAL EXCEPTION: main ERROR/AndroidRuntime(28218): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.provider.Telephony.SMS_RECEIVED (has extras) } in [email protected] ERROR/AndroidRuntime(28218): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:905) ERROR/AndroidRuntime(28218): at android.os.Handler.handleCallback(Handler.java:587) ERROR/AndroidRuntime(28218): at android.os.Handler.dispatchMessage(Handler.java:92) ERROR/AndroidRuntime(28218): at android.os.Looper.loop(Looper.java:123) ERROR/AndroidRuntime(28218): at android.app.ActivityThread.main(ActivityThread.java:4627) ERROR/AndroidRuntime(28218): at java.lang.reflect.Method.invokeNative(Native Method) ERROR/AndroidRuntime(28218): at java.lang.reflect.Method.invoke(Method.java:521) ERROR/AndroidRuntime(28218): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) ERROR/AndroidRuntime(28218): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) ERROR/AndroidRuntime(28218): at dalvik.system.NativeStart.main(Native Method) ERROR/AndroidRuntime(28218): Caused by: java.lang.NullPointerException ERROR/AndroidRuntime(28218): at android.os.Parcel.readException(Parcel.java:1253) ERROR/AndroidRuntime(28218): at android.os.Parcel.readException(Parcel.java:1235) ERROR/AndroidRuntime(28218): at com.android.internal.telephony.ISms$Stub$Proxy.sendText(ISms.java:369) ERROR/AndroidRuntime(28218): at android.telephony.SmsManager.sendTextMessage(SmsManager.java:87) ERROR/AndroidRuntime(28218): at com.THE.APPLICATION.MAINACT.sendMessage(MAINACT.java:214) ERROR/AndroidRuntime(28218): at com.THE.APPLICATION.SMSReceiver.onReceive(SMSReceiver.java:24) ERROR/AndroidRuntime(28218): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892) ERROR/AndroidRuntime(28218): ... 9 more
Sample các tin nhắn văn bản để gửi các vấn đề:
VERBOSE/debug_tag(28218): msgText is: possÃvel.
Vì vậy, nó đọcpossÃvel khi nó nên đượcpossível
Xin vui lòng một số linh hồn giác ngộ giúp tôi. Anh ấy/cô ấy sẽ có một vị trí đặc biệt trong trái tim tôi! :)
Edit: Nếu vị trí đặc biệt trong trái tim tôi không cắt nó, tôi sẵn sàng trả một vài Bucks cho một giải pháp làm việc ...
Làm cho tinh thần, phải không? Nhưng nó không hoạt động nếu không có sendMultipartTextMessage với các ký tự 8 bit (rõ ràng là nó hoạt động cho các ký tự 7 bit không có nó). Tôi cảm thấy có điều gì đó không thực sự đúng trong đó. –