通过意图添加Android联系人数据是乱码

问题描述 投票:0回答:1

我有一个意图,打开Android上的创建联系人屏幕。当我尝试添加希伯来字母的联系人时,创建联系人屏幕上的承租人显示为问号(????)

我已经尝试将名称编码为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();
                }

所有包含希伯来字母的字段目前显示为“????”我很难在网上找到解决方案,而我做的那些解决方案也不合适。

谢谢

android encoding android-contacts
1个回答
0
投票

不确定如何实现vcard,但我假设vcard.getName()返回一个字符串。

你在这里做的就是说:取String字符串,将其转换为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"));
© www.soinside.com 2019 - 2024. All rights reserved.