JAVA编码问题的一些理解

原创 2005年05月29日 01:28:00
Java 语言默认的编码方式是UNICODE ,而我们中国人通常使用的文件和数据库都是基于 GB2312 或者 BIG5 等方式编码的,怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编码呢?本文将从汉字编码的常识入手,结合 Java 编程实例,分析以上两个问题并提出解决它们的方案:

1.在JSP程序中加入一条语句:
<%@page contentType="text/html;charset=gb2312" %>

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 能够严格地测试它的产品,为用户带来更多的方便。

JAVA编码问题的一些理解

 Java 语言默认的编码方式是UNICODE ,而我们中国人通常使用的文件和数据库都是基于 GB2312 或者 BIG5 等方式编码的,怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编码呢?本文...
  • zaowei21
  • zaowei21
  • 2004年12月29日 11:52
  • 1612

JavaWeb的编码问题

无论是图片,文档,声音,在网络IO,磁盘io中都是以字节流的方式存在及传递的,但是我们拿到字节流怎么解析呢?这句话就涉及了编码,解码两个过程,从字符数据转化为字节数据就是编码,从字节数据转化为字符数据...
  • yuhaiqiang_123
  • yuhaiqiang_123
  • 2016年07月02日 16:14
  • 3098

line-height的一些深入理解及应用

“行高”顾名思意指一行文字的高度。具体来说是指两行文字间基线之间的距离。下图的红色线即为基线。一. line-height与line boxes高度ss中起高度作用的应该就是height以及line-...
  • taotaomin99
  • taotaomin99
  • 2017年08月31日 16:51
  • 144

java编码问题的解决办法!!

一、Java中文问题的由来   Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身...
  • wenjie4892543
  • wenjie4892543
  • 2011年08月18日 10:34
  • 1044

java数据库的一些编码问题

gb2312_chinese_CI : 只支持简体中文 gb2312_BIN    :而gb2312_bin可以说是gb2312_chinese_ci的一个子集, 而且gb2312_BIN是二进...
  • chaney_f
  • chaney_f
  • 2014年07月17日 10:53
  • 219

JAVA一些基础概念

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表...
  • zheng__jun
  • zheng__jun
  • 2016年08月22日 21:43
  • 6197

关于编码问题,自己的一些理解

相信很多朋友在工作中会遇到一件较头疼的事儿,那就是字符编码问题,比如在启动maven项目,install时会出现找不到字符等问题,一般解决的方法是clear项目等。如果还是出现这个问题,就手动在通用选...
  • u014508939
  • u014508939
  • 2017年03月28日 11:29
  • 251

贪心算法 哈夫曼编码问题

哈夫曼编码问题。 问题描述:现有一个文本文件,其中包含的字符数据出现的次数各不相同,先要求对该文本中包含的字符进行编码,使文本占用的位数更小。...
  • wyxynddd
  • wyxynddd
  • 2016年06月15日 15:17
  • 784

《编译.java文件时的编码问题》更新版本

采用javac工具,编译.java文件生成.class文件的时候,主要经历两个过程,分别介绍如下。 一、解码.java文件中的字节流得到字符流 输入:.java文件中的字节流 输出:解码.java文件...
  • DSLZTX
  • DSLZTX
  • 2015年08月18日 15:38
  • 721

Java中常见的Exceptions

Java代码实现中经常会碰到异常需要抛出来,我们一起了解一下常见的异常信息: Throwable Exception Error RuntimeException ClassNotFoundExce...
  • smszhuang168
  • smszhuang168
  • 2015年11月29日 23:43
  • 1330
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA编码问题的一些理解
举报原因:
原因补充:

(最多只允许输入30个字)