【发布时间】:2010-11-20 15:28:31
【问题描述】:
基本上我有一个在收到短信后发送短信的工作应用程序。
一切正常,除了短信发送有“特殊字符”,即“é,à,í,ç”等。
我尝试了很多方法,包括字符集转换,但我根本无法让它工作...... msgText 总是返回字符集编码问题。
这是发送消息的部分:
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();
}
}
这是我在 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;
}
几乎绝望,我什至在这里尝试了 unicode 消息传递的解决方案(也没有帮助):
http://since2006.com/blog/android-send-unicode-message/
无论如何,这是(清理 - 包是 com.THE.APPLICATION,主要活动是 MAINACT)LogCat 崩溃时(尝试发送消息时,收到消息后):
WARN/dalvikvm(28218): threadid=1: 线程以未捕获的异常退出 (group=0x4001d7f0)
错误/AndroidRuntime(28218):致命异常:主要
ERROR/AndroidRuntime(28218): java.lang.RuntimeException: 在 com.THE.APPLICATION.SMSReceiver@44acd880 中接收广播 Intent { act=android.provider.Telephony.SMS_RECEIVED (has extras) } 时出错
错误/AndroidRuntime(28218):在 android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:905)
错误/AndroidRuntime(28218):在 android.os.Handler.handleCallback(Handler.java:587)
错误/AndroidRuntime(28218):在 android.os.Handler.dispatchMessage(Handler.java:92)
错误/AndroidRuntime(28218):在 android.os.Looper.loop(Looper.java:123)
错误/AndroidRuntime(28218):在 android.app.ActivityThread.main(ActivityThread.java:4627)
错误/AndroidRuntime(28218):在 java.lang.reflect.Method.invokeNative(本机方法)
错误/AndroidRuntime(28218):在 java.lang.reflect.Method.invoke(Method.java:521)
错误/AndroidRuntime(28218):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
错误/AndroidRuntime(28218):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
错误/AndroidRuntime(28218):在 dalvik.system.NativeStart.main(本机方法)
错误/AndroidRuntime(28218):由:java.lang.NullPointerException 引起
错误/AndroidRuntime(28218):在 android.os.Parcel.readException(Parcel.java:1253)
错误/AndroidRuntime(28218):在 android.os.Parcel.readException(Parcel.java:1235)
错误/AndroidRuntime(28218):在 com.android.internal.telephony.ISms$Stub$Proxy.sendText(ISms.java:369)
错误/AndroidRuntime(28218):在 android.telephony.SmsManager.sendTextMessage(SmsManager.java:87)
错误/AndroidRuntime(28218):在 com.THE.APPLICATION.MAINACT.sendMessage(MAINACT.java:214)
错误/AndroidRuntime(28218):在 com.THE.APPLICATION.SMSReceiver.onReceive(SMSReceiver.java:24)
错误/AndroidRuntime(28218):在 android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892)
错误/AndroidRuntime(28218): ... 9 更多
发送有问题的消息文本示例:
VERBOSE/debug_tag(28218): msgText 是:possÃvel。
所以,它读取 possÃvel什么时候应该 possível
请一些开明的灵魂帮助我。他/她将在我心中占有特殊的位置! :)
编辑:如果我心中的特殊位置没有削减它,我愿意花几块钱买一个可行的解决方案......
【问题讨论】:
标签: android sms special-characters character-encoding