java中文问题-浅析

问题|中文

jsp之中什么问题最难处理?小弟在几天前想安装jsp+javabean论坛acjspbbs,研究了3天之后,明白了答案就是java中处理中文的问题。

acjspbbs采用的字符编码是GBK,我采用的是WIN2k系统,正常来说应该是水到渠成的,但是,竟然被我发现,它的javabean中保存入数据库语句是使用的是ISO8859-1编码,直接导致所以从数据库取出的资料全部乱码,包括:论坛名等常量、用户发的帖子标题和内容等等。

其实,java系统内部会把全部的字符串统一使用UTF-8编码,而在内部转化之前会使用操作系统默认的编码,其中包括输入和输出。要想不乱码,只需要“统一java系统的输入、输出以及操作系统的字符集”,这也是处理java系统汉字的一个原则。原因是由于java的跨平台特性,字符集必须由具体的操作系统给出。

由此可以得到一个最简单的解决jsp乱码的办法,其中主要需要把握三个环节:
1、开发和编译代码时就指定一个字符集,比如ISO-8859-1(西方的系统多数使用这个)
2、确定操作系统的字符集跟1统一,比如也用ISO-8859-1,这样的OS有很多,linux就是啦
3、如果开发jsp,每个页面都明确指定字符集:
<%@ page contentType="text/html;charSet=ISO8859-1" %>

这样就达到了前面的目标,统一了三者的字符编码。

这样的系统虽然很好,没有乱码问题,但是显然是以破坏跨平台特性为代价换取来的。想要根本解决问题,看来只有将java系统统一为UTF-8编码,这需要找到所有的出入口。

具体需要注意以下几个环节:
1、开发和编译时候指定字符集为UTF-8
2、用过滤器将所有请求转为UTF-8字符集编码
如果是用一个servlet控制分配的就在servlet的filter中写
request.setCharacterEncoding("UTF-8")
如果是用jsp页面,就在头部定义
<%@ page contentType="text/html;charSet=UTF-8" %>
3、在所有的输出上包括数据库连接上都指定使用字符集UTF-8

另外:如果你在做二次开放,就需要重新编译包,指定使用UTF-8编码

附:在编译时指定字符集的语法是javac -encoding <encoding> <sourcefile>

说明:这里很多观点是引用他人的,但是我自己使用过,是绝对有效的解决办法。

时间: 2024-10-21 18:15:56

java中文问题-浅析的相关文章

关于Java中文问题的几条分析原则

问题|中文   引言 尽管对于Java中文处理问题的讨论已不乏其数,但由于Java技术涉及内容广(J2EE包含了十几种相关技术),技术供应商繁多,面向Java的Web服务器.应用服务器以及JDBC数据库驱动等都没有官方的标准,所以Java应用在处理中文过程中出了存在固有的问题外也存在随着选用的服务器,驱动程序的不同而带来的Java中文问题的多变性,增加了问题的复杂度.那么,我们如何在这么纷繁的现象中找到问题的症结呢? Java中文问题的一般解决办法 事实上,Java的中文问题都是由于Java应用

Java中文问题及最优解决方法

解决|问题|中文 1.中文问题的来源 计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理.随着计算机的发展,为了适应世界其它民族的语言(当然包括我们的汉字),人们提出了UNICODE编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,目前,大多数国际性的软件内部均采用UNICODE编码,在软件运行时,它获得本地支持系统(多数时间是操作系统)默认支持的编码格式,然后再将软件内部的UNICODE转化为本地系统默认支持

java中文解决大全(下)

解决|中文 4.中文问题的分类及其建议最优解决办法     了解以上JAVA处理文件的原理之后,我们就可以提出了一套建议最优的解决汉字问题的办法.    我们的目标是:我们在中文系统中编辑的含有中文字符串或进行中文处理的JAVA源程序经编译后可以移值到任何其它的操作系统中正确运行,或拿到其它操作系统中编译后能正确运行,能正确地传递中文和英文参数,能正确地和数据库交流中英文字符串.    我们的具体思路是:在JAVA程序转码的入口和出口及JAVA程序同用户有输入输出转换的地方限制编码方法使之正确即

java中文解决大全(上)

解决|中文 说明:本文为作者原创,作者联系地址为:josserchai@yahoo.com.由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台时的中文问题.于是我给出此篇文章,内容包括对控制台运行的class.Servelets.JSP及EJB类中的中文问题我剖析和建议解决办法.希望大家指教. Abstract:本文深入分析了Java程序设计中Java编译器对jav

Java 中文问题的解决

解决|问题|中文 Java 中文问题一直困扰许多学习者.总结了下面的一些情况的解决方法.希望对大家有帮助. 连接 Mysql Database Server:------------------------------------------------------------------------------- mysql 不支持 unicode,所以比较麻烦. 将 connectionString 设置成 encoding 为 gb2312 String connectionString

Java中文问题详解,底层编码解剖

编码|问题|详解|中文 Java中文问题详解预备知识: 1.字节和unicode Java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式 是使用字节流的. 因此Java要对这些字节流经行转化.char是unicode的,而byte是字节. Java中byte/char互转的函数在sun.io的包中间有.其中ByteToCharConverter类是中调度, 可以用来告诉你,你用的Convertor.其中两个很常用的静态函数是 public static By

关于java中文语音合成的问题。

问题描述 关于java中文语音合成的问题. 本人要用java实现语音播报,但是找不到java的语音合成包.现跪求各位大神给一些建议. 解决方案 java默认能播放一些midi文件,这样的代码很好找,都是老代码了,要是想播放flc,或者MP3,或其他8和旋以上的文件,你搜搜gameframework,好像是oracle出的. 解决方案二: 我是想输入一个中文字符串,然后把这个字符串翻译成语音输出.但是找不到语音包.

java中文乱码解决之道(一)—–认识字符集

java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.com来解决问题.阅读许多关于中文乱码的解决办法的博文后,发现对于该问题我们都没有一个清晰明了的认识,于是LZ想通过这系列博文来彻底分析.解决java中文乱码问题,如有错误之处望各位同仁指出!当然,此系列博文并非LZ完全原创,都是在前辈基础上总结,归纳,如果雷同纯属借鉴-- 问题起源 对于计算机而言,它仅认识两个0和1,不管是在内存中还是外部存储设备上,我们所看到的文字.图片.视频等

java中文乱码问题GBK-&amp;amp;gt;UTF-8

问题描述 java中文乱码问题GBK->UTF-8 现在有个系统A向系统B发送报文.系统A发送报文时的编码格式为GBK,而系统B接收报文时使用UTF-8解析. 当系统A向B发送如下报文时: "aaa你好",系统B解析时其中中文会乱码,可能接收到的报文为:"aaa啔屶",现在不能够要求系统A改变发送报文时使用的编码格式. 最好能通过转化的方式将系统B接收到的乱码转回为正常的GBK格式,有这样的方法吗? ps:系统A通过http请求到系统B,系统B通过reques

java代码 文本处理-java中文文本处理代码

问题描述 java中文文本处理代码 Java对文章进行处理,能输出作者,关键词之类的,求代码和解析. 解决方案 我谈谈我的看法,论文中的作者和其它一些前后没有什么特定符号的字符,估计正则表达式很难获取剩下的就是http://poi.apache.org/download.html,获取字体大小,来进行判断. 解决方案二: 那你的待处理文本的内容是否有一定的规律呢,时本身是否是HTML文件格式,单纯对内容解析的话,可以直接用字符串截取处理,但是如果是HTML文件可以用htmlparser工具类进行