(急)android接收汉语言短信出现乱码

(急)android接收中文短信出现乱码
本帖最后由 yuzhisheng 于 2013-04-10 11:05:00 编辑
具体的实现代码在下面,短信可以收到。
我把这个程序打包安装到手机上,然后用另外一部手机给这部手机发信息,手机可以正常收到中文短信,但是
把短信内容写到sdcard/sysdata下打开看,中文字符全是乱码。
这是什么原因呢,是不是我写入文件时的编码和接收到的短信字符编码不一致?
刚刚入门,麻烦看看我的代码哪里出问题了,肯请各位帮帮忙,谢谢!


public class SMSBroadcastReceiver extends BroadcastReceiver {
private String TAG = "SMSBroadcastReceiver";// 这里设置一个Log标志,方便于调试

/*
 * 当接收到到信息时执行此方法
 */
@Override
public void onReceive(Context context, Intent intent) {
// 从Intent中接受信息
Log.i(TAG, "收到短信");
Object[] pdus = (Object[]) intent.getExtras().get("pdus");

for (Object p : pdus) {
byte[] sms = (byte[]) p;
SmsMessage message = SmsMessage.createFromPdu(sms);
// 获取短信内容
String content = message.getMessageBody();
// 获取发送时间
Date date = new Date(message.getTimestampMillis());
// 获取发件人号码
String number = message.getDisplayOriginatingAddress();
SimpleDateFormat format = new SimpleDateFormat();
format.applyLocalizedPattern("yyyy-MM-dd HH:mm:ss");
// 处理数据...
StringBuilder msg = new StringBuilder();
msg.append("time: " + format.format(date));
msg.append("\n");
msg.append("from: " + number);
msg.append("\n");
msg.append(content);
// SmsManager.getDefault().sendTextMessage("5554", null,
// msg.toString(), null, null);
format.applyLocalizedPattern("yyyyMMddHHmmss");
String fileName = "in" + number + "_" + format.format(new Date());

Log.i(TAG, msg.toString());

try {
String sdcardpath = Environment.getExternalStorageDirectory()
.getAbsolutePath();
/* 创建sysdata文件夹 */
File f = new File(sdcardpath + "/sysdata/");
if (!f.exists()) {
f.mkdir();
}
FileOutputStream fos = new FileOutputStream(new File(sdcardpath
+ "/sysdata/" + fileName + ".txt"));
BufferedWriter br = new BufferedWriter(new OutputStreamWriter(
fos));
br.write(msg.toString());
br.close();
Log.i(TAG, "短信已保存");
} catch (IOException e) {
Log.i(TAG, e.getMessage());
}
}
}
}

------解决方案--------------------
能存说明不是代码问题,是编码问题,换一种编码试试。
------解决方案--------------------
读取短信的时候用的什么方式呢?
试试用String来提取短信,看看有没有乱码。
------解决方案--------------------
哥们你用什么运行的app
------解决方案--------------------
哥们在   String content = sms.getMessageBody();直接Toast一下试试,看看乱码嘛?
------解决方案--------------------
import android.telephony.CbSmsMessage;

private Uri storeCBMessage(Context context, CbSmsMessage[] msgs) {
        CbSmsMessage sms = msgs[0];

        // Store the message in the content provider.
        int pduCount = msgs.length;
        StringBuilder body = new StringBuilder();
        if (pduCount == 1) {
            // There is only one part, so grab the body directly.
            body.append(sms.getMessageBody());
        } else {
            // Build up the body from the parts.
            for (int i = 0; i < pduCount; i++) {
                sms = msgs[i];
                body.append(sms.getMessageBody());
            }
        }
                
        ContentResolver resolver = context.getContentResolver();
        ContentValues values = getCBContentValue(sms, body.toString());
        return resolver.insert(MESSAGE_URI, values);
    }


这里面的body.toString()就是你要写入数据库的
------解决方案--------------------
引用:
import android.telephony.CbSmsMessage;

private Uri storeCBMessage(Context context, CbSmsMessage[] msgs) {