Java的中文问题通常会困扰很多开发者,你可能在开发Web应用程序的时候遇到中文参数的传递问题,最后你可能选择使用Filter把Request
的编码方式设置为GBK来解决。在J2ME的开发中我们同样会遇到中文问题,比如在RMS中存储中文、网络传输中传输中文、从文件中读取中文等问题。
我们在解决中文问题的时候,用到的最多的一个词就是UTF-8。我们知道ASCII码是单字节编码方式,可以解决英文的问题,但是中文的字库
非常庞大,用ASSII码就难以解决了。Java语言是支持UNICODE编码方式的,UNICODE是双字节的编码方式可以支持中文字库,但是这多少带
来一些浪费,因为并不是所有的字符串都是非英文字符的。UTF-8编码方式正好可以解决这个问题,只有当字符不是ASSII码的时候他采用双字节来表示,
这样就节省了空间。这里我只总结了三种J2ME常见的中文问题。
网络传输中的中文问题
解决这个问题的关键是我们不采用InputStream或者OutputStream提供的方法按照字节来传递数据,而是把
InputStream或者OutputStream封装为DataInputStream和DataOutputStream。这样我们就可以使用
DataOutputStream中的writeUTF(String
s)来送出数据了,同时可以使用DataInputStream提供的readUTF()来读入数据。注意在这两个方法搭配使用的时候要注意顺序。比如我
们在联网的时候可能写出这样的代码
客户端
dos.writeInt(myint);
dos.writeByte(mybyte);
dos.writeUTF(myString);
服务器端
int i = dis.readInt();
byte b = dis.readByte();
String s = dis.readUTF();
RMS持久性存储的中文问题
由于RMS中的数据存储都是按照byte[]的格式存储的,因此我们需要稍微变化一下,但是基本上还是走UTF-8的思路。
写入数据
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeUTF(myString);
byte[] data = baos.toByteArray();
rs.addRecord(data,0,data.length);
读出数据
byte[] data = rs.getRecord(index);
ByteArrayInputStream bais = new ByteArrayInputStream(data);
DataInputStream dis = new DataInputStream(bais);
String myString = dis.readUTF();
读取中文文件的问题
在MIDP中并不支持文件系统,但是我们可以读取jar包中的文件。如果文件中含有中文,那么我们需要进行一些特殊的处理,首先我们使用UE
或者Notepad工具把相关的文件转换文UTF-8格式编码。我们在读取文件的时候需要进行如下的简单处理。下面是处理函数。
public String readFromFile(String fileName)
{
String returnString = null;
InputStream is = getClass().getResourceAsStream(fileName);
if (is != null)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int ch = 0;
try
{
while ((ch = is.read()) != -1)
{
baos.write(ch);
}
byte[] data = baos.toByteArray();
returnString = new String(data, "UTF-8");
is.close();
baos.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
return returnString;
}
分享到:
相关推荐
解决J2ME开发中的连续按键问题 解决J2ME开发中的连续按键问题
包含了用.NET创建web服务的源码,设置web.config的http编码,用J2ME写客户端调用程序
J2me中文教程.pdf J2me中文教程.pdf
J2ME中文版API J2ME中文版API
这是解决j2me不能调试的问题。在做移动开发时所遇到的问题,根据此文件就可以解决问题!
J2me学习的好帮手,详解,细节,自认为很有帮助,解密版,
J2ME通用进度条,解决联网、线程操作等候问题
J2ME 中文api以及应用 J2ME 中文api以及应用.rar
J2ME中文教程 不错的学习资料,刚开始学习的可以参考下!
J2ME相关资源,介绍J2ME的相关基础知识,图片加载、网络连接问题、进度条相关问题
J2ME开发 J2ME开发 J2ME开发 J2ME开发
j2me 文档 开发 官方 中文 j2me 文档 开发 官方 中文 j2me 文档 开发 官方 中文
J2ME 中文教程 by www.j2medev.com MIDlet 程序的机制。 第十章“MIDlet 的开发流程与部署”介绍了如何真正完成你的程序并打包发往设备运行。 第十一章“搭建开发平台—WTK”主要讲述J2ME 新手最常使用的开发工具...
J2ME中文API J2ME中文API帮助文档
J2ME中文教程 J2ME中文教程
j2me中文教程
J2ME中文教程 适合初学者学习的好书 很好很强大!多多下载 多多学习 共同进步!
J2ME技术概述,CLDC简介,MIDP的使用,GAME API,等技术
J2ME 中文教程
J2ME中文开发教程(附带Myeclipse用J2ME插件),想要学习J2ME的朋友们千万不要错过啊。很清晰的PDF版本。