各位大大,
android为什么在SIM卡中存中文联系人,重启之后,中文联系人名字会消失?
但是存的号码还保留!
有遇到类似现象的吗?
谢谢了!
android为什么在SIM卡中存中文联系人,重启之后,中文联系人名字会消失?
但是存的号码还保留!
有遇到类似现象的吗?
谢谢了!
解决方案 »
- Android 4.0 webview加载页面出错
- 已经做好了一个 通讯录,现在想做一个来电显示,显示联系人的一些信息。要如何实现??
- 我在asynctask里面使用toast但是实际没有提示消息,为什么
- 求教:froyo 中如何启动overlays.cpp中的main()函数
- Android开发中能不能把模拟器和开发环境分别装在不同的机器上??
- 关于ButtonListener的问题
- 在activity中怎么从values文件夹下的保存图片的xml中取图片
- Android中继承的Dialog导致程序崩溃
- 关于Android照相的一段代码
- 求助:android提取系统settings代码怎么单步调试?
- 为什么在国内android market会搜索出很多韩国应用
- android menu.lst在哪里设置呢?
ContentValues cv = new ContentValues();
cv.put("tag", "");
cv.put("number", "");
cv.put("newTag", "中文");
cv.put("newNumber", "12345678");
getContentResolver().insert(SIM_CONTACTS_URI, cv); 重启之后,“中文”这2个字就没了,但是12345678这个号码还会保留!
这个问题的原因是在往sim卡写联系人的时候会首先判断是不是标准的ascii码,不是的话会把这个名字用空格代替,代码如下:
在AdnRecord.java中
if (!TextUtils.isEmpty(alphaTag)) {
byteTag = GsmAlphabet.stringToGsm8BitPacked(alphaTag);
System.arraycopy(byteTag, 0, adnString, 0, byteTag.length);
}
至于sim卡中存储中文的80格式介绍请参考下面的链接
http://blog.csdn.net/jennyvenus/archive/2008/04/20/2309701.aspx
byteTag = str.getBytes("utf-16be");
用80开头,然后加编码字符。
ucs2和unicode只是字节序不同,unicode是小头在前,ucs2是大头在前。。
你转成utf16之后需要把每个编码的前后字节交换位置。
byteTag = str.getBytes("utf-16le");
这个不知道行不行,马上试试!
你对比的只是sim卡存储这部分代码吧 , 看看Android提供的相应位置的字符集字库,是不是一样的...不是所有的文字字符都是UNICODE字符集的,我记得2.X里简体中文是GBK...
使用byteTag = alphaTag.getBytes("ISO-10646-UCS-2");
ISO-10646-UCS-2这个就是UCS2编码格式,但是写入之后放在别的手机上读也是乱码!
现在真不清楚了!
我印象中是没有这个问题的,要不然你去看看我写着玩的一篇文章?
http://blog.csdn.net/wenlin56/archive/2010/12/14/6074437.aspx
就像是:
我在诺基亚手机上存了一个中文联系人,然后在android里面读取也是中文;现在在android上存了一条中文联系人,在别的手机上也是乱码!
但是发现一个问题 就是中英文数字混合这种形式存的话 英文 数字 也是按照utf-16格式存取 占2个字节
SIM卡最多只能存6个中文字符,现在如何才能存这种混合的情况呢?
这个好像是没有办法的,如果你要存中文的话在名字的开头会加上 0x80,读出来解析度话读到第一个字节是0x80的话走到就是80编码的解码过程,两个字节解出一个字符。
android定义的adn文件中名字这个字段是13个,还是14个字节来着(不是很记得了),反正除开0x80只能放6个字符。号码段好像也有限制长度。具体多少也不记得了。
如果要存超过6个字符的中文的话有两种办法好像。
1,使用81或者82编码,具体你研究,但是这个很有限制条件,对中文不太适合。
2,MS sim卡中MS有个存放额外名字的ef文件可以用来存放超出长度的字符,具体记不清了,可以研究下3gpp文档中的sim卡中的EF文件部分。号码超出长度部分也可以这样来存。
但是很负责任的告诉你,android 在java层没有实现对这个ef文件的存储跟读取,自己研究研究应该可以实现。
jindan_jinming怎么解决的!我也遇到这样的问题!
http://blog.csdn.net/jindan_jinming/article/details/6453116