android - 通过 Intent 添加时,Android 联系人数据是乱码
问题描述
我有一个意图在 android 上打开创建联系人屏幕。当我尝试添加与 hebrew char' 的联系人时,创建联系人屏幕上的承租人显示为问号(????)
我尝试将名称编码为 utf-8,但我没有解决我的问题,而是在希伯来语中将名称显示为 %X 字符
这是我的尝试:
Intent intent = new Intent(ContactsContract.Intents.Insert.ACTION);
intent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
try {
intent.putExtra(ContactsContract.Intents.Insert.NAME, new String(vcard.getName().getBytes("ISO-8859-1"), "utf-8"));
intent.putExtra(ContactsContract.Intents.Insert.PHONE, vcard.getPhoneNumber()).putExtra(ContactsContract.Intents.Insert.PHONE_TYPE, 0);
intent.putExtra(ContactsContract.Intents.Insert.EMAIL, vcard.getEmail()).putExtra(ContactsContract.Intents.Insert.EMAIL_TYPE, 0);
intent.putExtra(ContactsContract.Intents.Insert.COMPANY, vcard.getCompany());
intent.putExtra(ContactsContract.Intents.Insert.JOB_TITLE, vcard.getTitle());
startActivity(intent);
}catch(UnsupportedEncodingException e){
e.printStackTrace();
}
所有包含希伯来字母的字段当前显示为“????” 我很难在网上找到解决方案,而我找到的解决方案不适合。
谢谢
解决方案
不确定如何vcard
实现,但我假设vcard.getName()
返回一个字符串。
您在这里所做的就像是说:获取字符串名称,将其转换为ISO-8859-1
,然后将这些字节解释utf-8
为.
这通常有效:
intent.putExtra(ContactsContract.Intents.Insert.NAME, vcard.getName());
如果它不起作用,试试这个:
intent.putExtra(ContactsContract.Intents.Insert.NAME, new String(vcard.getName().getBytes("UTF-8"), "UTF-8"));