在基于JAVA的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号。这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题。本文抽取了UFO中的演示实例来介绍如何解决中文乱码问题, UFO是gm365发布的一个web server软件(以建设网站的稳定性和高负载能力,快速的响应速度和低CPU消耗的功能而开发)。
1、解决jsp中文乱码问题
在jsp中,当使用out.print(request.getParameter("parameter-name"))输出表单数据时,如果表单数据为中文字符时,则输出的内容是乱码。引起中文乱码的原因是,在默认情况下,提取表单数据使用的编码格式为UTF-8.为了解决中文乱码问题,首先要使用 ISO-8859-1 编码格式将表单数据存储到字节数组中,然后再使用借助 gb2312的编码格式将字节数组转换为字符串。完整的处理表单的程序代码如下:
例如:我们要将用户提交的表单数据输入到页面,直接用如下方法将会在parameter-name为中文字符时出现乱码
<%
String pName =request.getParameter("parameter-name");
out.println(pName);
%>
需要对其做如下改动可解决此类中文字符乱码问题:
<%
String pName =request.getParameter("parameter-name");
byte[] bytesStr=pName.getBytes("ISO-8859-1");
out.println(new String(bytesStr,"gb2312"));
%>
2、如何处理servlet中的中文字符乱码问题(以jsp文件调用servlet为例来演示如何处理中文字符)
ioFileServlet.jsp (此jsp文件用来写入文件、提交给servlet文件ioFileServlet来处理)
<%@ page contentType="text/html;charset=GB2312" %>
<script language="javascript">
function on_submit()
{//验证数据的合法性
if (form1.file_content.value == "")
{
alert("文件内容不能为空,请输入文件内容!");
form1.file_content.focus();
return false;
}
}
</script>
<HTML>
<head>
<title>提交文件内容</title>
</head>
<BODY>
<div align="center">
<center>
<table border="1">
<tr><td colspan="2" align="center">用servlet处理输入的文件内容</td></tr>
<tr>
<tr><td>
<form name="form1" action="servlet/readdata/ioFileServlet" method="post" onsubmit="return on_submit()">
请输入文件内容:
</td><td>
<textarea rows="7" name="file_content" cols="52"></textarea>
</td></tr>
<tr><td colspan="2" align="center"><input type="submit" value="提交"></td></tr>
</form>
</table>
</center>
</div>
</html>
servlet文件ioFileServlet的源代码:
ioFileServlet.java
package readdata;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ioFileServlet extends HttpServlet
{
public String codeToString(String str)
{//处理中文字符串的函数
String s=str;
try
{
byte tempB[]=s.getBytes("ISO-8859-1");
s=new String(tempB);
return s;
}
catch(Exception e)
{
return s;
}
}
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
//设置mime
response.setContentType("text/html;charset=GB2312");
PrintWriter out=response.getWriter();
out.println("<HTML><head><title>接收新用户注册</title></head><BODY>");
//把提交的文件内容写入文件
int RowSize=30;//文件每行的字符数
String tempString1=null;
String tempString2=null;
tempString1=codeToString(request.getParameter("file_content"));
if(tempString1!=null)
{
File tempFile1=new File("d:/fileContent.txt");
FileWriter outfile1=new FileWriter(tempFile1,true);
BufferedWriter outbuffer1=new BufferedWriter(outfile1);
int writeStringLength=tempString1.length();
for(int i=0;i<writeStringLength/RowSize+1;i++)
{
if((i+1)*20<writeStringLength)
{
tempString2=tempString1.substring(i*RowSize,(i+1)*RowSize);
}
else
{
tempString2=tempString1.substring(i*RowSize,writeStringLength);
}
outbuffer1.write(tempString2);
outbuffer1.newLine();
}
outbuffer1.flush();
outbuffer1.close();
outfile1.close();
}
out.println("写入的文件内容是:<br>");
//从文件中读取内容
File f=new File("d:/fileContent.txt");
if(f.exists())
{
FileReader fileReader1=new FileReader(f);
BufferedReader buffer1=new BufferedReader(fileReader1);
byte bufferArray[]=new byte[90];
String tempString=null;
while((tempString=buffer1.readLine())!=null)
{
out.println(tempString+"<br>");
}
buffer1.close();
fileReader1.close();
}
else
{
out.println("故事中暂时没有内容。");
}
out.println("</body> </html>");
}
}
servlet功能用来接受ioFileServlet.jsp页面写入的内容、将其存入d盘根目录中的fileContent.txt中(如果没有就新建),最后将写入到fileContent.txt文件的所有内容显示出来。去掉servle处理中文字符串的函数、即不对servlet中的中文字符串进行处理,写入文件的内容将显示乱码。
相关推荐
解决中文乱码问题 解决中文乱码问题 解决中文乱码问题
java解决中文乱码问题
中文乱码javaWEB开发各种解决中文乱码问题
使用过滤器解决中文乱码。有时候碰见乱码问题,作为开发人员总得想办法解决不是吗?
Intraweb12 带注册码 解决汉字乱码问题 delphi2010下安装成功。 装之前要先卸载原来的intraweb
MySQL JDBC 彻底 解决 中文乱码问题 MySQL JDBC 彻底 解决 中文乱码问题
sqlite3 for delphi 自己修改的版本 解决中文乱码问题
解决中文乱码问题专题 对中文乱码问题有深入的了解 适用于初学者
html 格式化之前必须保存一下。
配置web-xml解决中文乱码问题.pdf
用eclipse集成开发环境, jsp 过滤器——解决中文乱码问题
Java生成pdf文件,解决中文乱码问题.pdf
彻底解决Servlet及jsp解决中文乱码问题
zysong.ttf jfreechart 解决中文乱码 问题.zysong.ttf LInux字体库 .用于解决jfreechart在linux环境中的中文乱码问题
使用java压缩也解压zip文件方法,解决中文乱码问题。使用java自带的压缩解压算法,会出现中文乱码问题。使用apache io的zip包,有效解决该问题。Ant的压缩解压,也是使用该类。
敝人近期整理的客户端与服务端通信实例,数据编码约定采用UTF-8编码,解决中文乱码问题.ServerSocket组件可以同时接受一个或多个ClientSocket组件的连接请求,并与每个ClientSocket组件建立单独的连接,进行单独的...
jsp用过滤器解决中文乱码问题的方法.docx
C# .NET 4.0 LumiSoft.Pop3 个人修改版..解决中文乱码问题