RMS 中文乱码问题

时间:2023-02-02 18:23:41

写J2ME电话本程序是遇到了乱码问题

原因:因为程序中用了String 而 中文输入法是UTF编码,模拟器没有测试出BUG。

解决方案:将需要写入RMS的String转换成UTF编码的String类型就可以了。

写入时用 ByteArrayOutputStreambos和 DataOutputStream dos封装,

用dos. writeUTF()方法写入RMS库。用bos. toByteArray()获得byte[](rms需要写入byte[])

读取时用ByteArrayInputStream bis 和 DataInputStream dis 封装,

用dis.readUTF方法从RMS库读出。用bis. toByteArray()获得byte[](rms需要读取byte[])

  参考如下代码 :

private   RecordStore   rs   =   null;   

private   RecordEnumeration re   =   null;

          try   {

rs   =   RecordStore.openRecordStore("Result",   true);   

re =   rs.enumerateRecords(   null,null,false);   

}catch(RecordStoreException   e)   {}   

  添加姓名: 

private   void   addName(String name)                       //保存姓名   

          {

ByteArrayOutputStream   bos=   new   ByteArrayOutputStream();   

DataOutputStream   dos   =   new   DataOutputStream(bos);   

try   {

dos.writeUTF(name);   

byte   data[]   =   bos.toByteArray();   

bos.close();   

dos.close();

try   {   

rs.addRecord(data,0,data.length);   

}catch(RecordStoreException   e)   {   }   

}   

                  catch   (IOException   ex)   {

}

 读取姓名:

while   (re.hasNextElement())   {   

byte[]   data=   re.nextRecord();   

try   {   

ByteArrayInputStream   bis   =   new   ByteArrayInputStream   (data);   

DataInputStream   dis   =   new   DataInputStream(bis);   

String   name     =   dis.readUTF();                   //取出姓名   

bais.close();   

dis.close();   

}catch   (IOException   ex)   {}   
}