博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA编码问题的一些理解(转)
阅读量:2504 次
发布时间:2019-05-11

本文共 2004 字,大约阅读时间需要 6 分钟。

JAVA编码问题的一些理解(转)[@more@]Java 语言默认的编码方式是UNICODE ,而我们中国人通常使用的文件和数据库都是基于 GB2312 或者 BIG5 等方式编码的,怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编码呢?本文将从汉字编码的常识入手,结合 Java 编程实例,分析以上两个问题并提出解决它们的方案:
1.在JSP程序中加入一条语句:
2.在URL请示字符串的编码问题。
如果通过GET/POST方法从客户端传递过来的信息中包含汉字信息,SERVLET/JSP无法得到正确的值。
我们在调用request.getParameter("param_name")前指定应用程序所希望的编码方式。
也就是request.setCharacterEcoding()即可
3.在不同的平台编码的问题是不同的。
在linux平台上的标准是Iso8859_1,而在win2k下是GBK的,这些是默认的标准,如果你的服务器不是这样的,那么编译的问题一定会有问题。本人就遇到这样的问题,两台LINUX服务器,一台lang=en,一台lang=en,UTF8,被我搞了N长时间才找到原因。
3.我本人用的最多的转换编码的一个类(在linux平台),几乎可以解决所有的编码问题。类的方法非常解决。主要就是asc2gb()和gb2asc()这两个类。
package com.whaic.tools;
import java.io.UnsupportedEncodingException;
public class ECov
{
public static String asc2gb(String asc){
String ret;
if(asc==null)return asc;
try{
ret=new String(asc.getBytes("ISO8859_1"),"GB2312");
}
catch(UnsupportedEncodingException e){
ret=asc;
}
return ret;
}
public static String gb2asc(String gb){
String ret;
if(gb==null)return gb;
try{
ret=new String(gb.getBytes("GB2312"),"ISO8859_1");
}
catch(UnsupportedEncodingException e){
ret=gb;
}
return ret;
}
}
4.读写文件时的中文问题:
Read::
FileInputStream fis = new FileInputStream(strInFile);
InputStreamReader isr = new InputStreamReader(fis, "GB2312");
Reader in = new BufferedReader(isr);
int ch;
while ((ch = in.read()) > -1) {
iCharNum += 1;
buffer.append((char)ch);
}
in.close();
Write::
FileOutputStream fos = new FileOutputStream(strOutFile);
Writer out = new OutputStreamWriter(fos, "Big5");
out.write(str);
out.close();
以上仅仅是本人是日常使用中遇到的一些问题和解决方案。由于国际化的工作并不是在国内完成的,所以在这些基本类发布之前,没有经过严格的测试,所以对中文字符的支持并不像 Java Soft 所声称的那样完美。Java 编程语言成长于网络世界,这就要求 Java 对多国字符有很好的支持。 Java 编程语言适应了计算的网络化的需求,为它能够在网络世界迅速成长奠定了坚实的基础。 Java 的缔造者 (Java Soft) 已经考虑到 Java 编程语言对多国字符的支持,只是现在的解决方案有很多缺陷在里面,需要我们付诸一些补偿性的措施。而世界标准化组织也在努力把人类所有的文字统一在一种编码之中,其中一种方案是 ISO10646 ,它用四个字节来表示一个字符。当然,在这种方案未被采用之前,还是希望 Java Soft 能够严格地测试它的产品,为用户带来更多的方便。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10617731/viewspace-961884/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10617731/viewspace-961884/

你可能感兴趣的文章
软件工程结对作业02
查看>>
三种版本控制系统
查看>>
如何做到不败之地
查看>>
一个想了好几天的问题——关于8086cpu自己编写9号中断不能单步的问题
查看>>
最近在学习多元分析,有空放上来分享
查看>>
js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange
查看>>
liMarquee演示12种不同的无缝滚动效果
查看>>
Spring Cloud - Ribbon实现客户端的负载均衡
查看>>
【13】239. Sliding Window Maximum
查看>>
lua基础学习(二)
查看>>
Hyperledge 开发环境配置常见问题
查看>>
Lock的await/singal 和 Object的wait/notify 的区别
查看>>
What is a good starting point for Directx 11 (SlimDX)
查看>>
EF CodeFirst 使用T4模板 生成文件
查看>>
051_循环关闭局域网中所有主机
查看>>
一步步学习SPD2010--第六章节--处理数据源(3)--连接一个RSS Feed XML文件
查看>>
一步步学习微软InfoPath2010和SP2010--第六章节--发布并提交表单数据(5)--管理员批准模板...
查看>>
[LeetCode] 312. Burst Balloons_hard tag: 区间Dynamic Programming
查看>>
哥尼斯堡七桥问题
查看>>
linux下的/dev/shm/ 以及与swap目录的区别
查看>>