各位大大,
android为什么在SIM卡中存中文联系人,重启之后,中文联系人名字会消失?
但是存的号码还保留!
有遇到类似现象的吗?
谢谢了!

解决方案 »

  1.   

    没坏
    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这个号码还会保留!
      

  2.   

    这是android源码中的一个问题,很早之前就有了,我接触到是从1.6开始,现在还有?
    这个问题的原因是在往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
      

  3.   

    那我先转成ucs2码,再存入sim卡吗?
      

  4.   

    现在发现使用byteTag = alphaTag.getBytes("utf-16be");变成的都是乱码!
      

  5.   

    试试,String str = new String(alphaTag.getBytes("utf-16be"), "utf-16be");
    byteTag = str.getBytes("utf-16be");
      

  6.   

    上面的链接介绍得很清楚,在sim卡中存中文用80格式的话
    用80开头,然后加编码字符。
    ucs2和unicode只是字节序不同,unicode是小头在前,ucs2是大头在前。。
    你转成utf16之后需要把每个编码的前后字节交换位置。
      

  7.   

    原来如此,现在没有这个问题了,我的2.1的机器,联系人都是存在sim卡上的,换电池重启过多次也没问题。
      

  8.   

                    String str = new String(alphaTag.getBytes("utf-16be"), "utf-16be");
                    byteTag = str.getBytes("utf-16le"); 
    这个不知道行不行,马上试试!
      

  9.   

    即使存储正确,打开文件读取时 编码不正确 也不行啊 会出现乱码或者是全ASCII码,比如纯英文现象...按其SIM卡规格存储后,打开时转成utf-8显示中文字符才可以正确 。
      

  10.   


    你对比的只是sim卡存储这部分代码吧 , 看看Android提供的相应位置的字符集字库,是不是一样的...不是所有的文字字符都是UNICODE字符集的,我记得2.X里简体中文是GBK...
      

  11.   

    我所想表达的意思是:不要只顾着SIM卡,不考虑自己在Android下...
      

  12.   

    找了很多资料:
    使用byteTag = alphaTag.getBytes("ISO-10646-UCS-2");
    ISO-10646-UCS-2这个就是UCS2编码格式,但是写入之后放在别的手机上读也是乱码!
    现在真不清楚了!
      

  13.   

    写进去你转一次,其编码顺序就已经乱了。当“联系人”程序再读出来的时候,就是乱码。
    我印象中是没有这个问题的,要不然你去看看我写着玩的一篇文章?
    http://blog.csdn.net/wenlin56/archive/2010/12/14/6074437.aspx
      

  14.   

    如果只是联系人读的时候变乱的话,那放在别的手机上应该没什么问题的!
    就像是:
    我在诺基亚手机上存了一个中文联系人,然后在android里面读取也是中文;现在在android上存了一条中文联系人,在别的手机上也是乱码!
      

  15.   

    存中文解决了
    但是发现一个问题 就是中英文数字混合这种形式存的话 英文 数字 也是按照utf-16格式存取 占2个字节 
    SIM卡最多只能存6个中文字符,现在如何才能存这种混合的情况呢?
      

  16.   


    这个好像是没有办法的,如果你要存中文的话在名字的开头会加上 0x80,读出来解析度话读到第一个字节是0x80的话走到就是80编码的解码过程,两个字节解出一个字符。
    android定义的adn文件中名字这个字段是13个,还是14个字节来着(不是很记得了),反正除开0x80只能放6个字符。号码段好像也有限制长度。具体多少也不记得了。
    如果要存超过6个字符的中文的话有两种办法好像。
    1,使用81或者82编码,具体你研究,但是这个很有限制条件,对中文不太适合。
    2,MS sim卡中MS有个存放额外名字的ef文件可以用来存放超出长度的字符,具体记不清了,可以研究下3gpp文档中的sim卡中的EF文件部分。号码超出长度部分也可以这样来存。
    但是很负责任的告诉你,android  在java层没有实现对这个ef文件的存储跟读取,自己研究研究应该可以实现。
      

  17.   


    jindan_jinming怎么解决的!我也遇到这样的问题!
      

  18.   

    楼上问的是字符序列,应该解决了吧,不知道,在android 1.0时,当时还无法发送中文短信,不过都在那个telephony/gsm里的源码里能找到
      

  19.   

    所有源码见博客:
    http://blog.csdn.net/jindan_jinming/article/details/6453116