`

解决中文乱码问题

 
阅读更多

 在基于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中的中文字符串进行处理,写入文件的内容将显示乱码。

分享到:
评论

相关推荐

    sqlite3 for delphi 解决中文乱码问题

    "sqlite3 for delphi 解决中文乱码问题"这个主题,正是针对这一问题提供了解决方案。这里我们将详细探讨SQLite3在Delphi中的应用,中文乱码的成因,以及如何通过自定义修改来解决这个问题。 首先,SQLite3是一个轻...

    editplus插件htmlFormatter.js解决中文乱码问题

    本文将深入探讨如何利用EditPlus插件htmlFormatter.js来解决中文乱码问题,以及在格式化HTML文件时的注意事项。 首先,我们了解下中文乱码问题的背景。在处理包含中文字符的HTML文件时,如果没有正确设置编码或者在...

    使用过滤器解决中文乱码问题

    本文将详细讲解如何利用过滤器来解决中文乱码问题。 1. **理解中文乱码** 中文乱码通常是因为字符编码不一致导致的。在计算机系统中,字符被编码成二进制表示,不同的编码标准(如GBK、UTF-8等)对同一字符有不同...

    Java生成pdf文件,解决中文乱码问题.pdf

    Java 生成 PDF 文件,解决中文乱码问题 Java 生成 PDF 文件,解决中文乱码问题是 Java 编程中常见的问题。解决这个问题的关键是正确地设置中文字体,以避免乱码问题。本文将通过一个完整的示例代码,详细讲解如何...

    配置web-xml解决中文乱码问题.pdf

    配置 Web.xml 解决中文乱码问题 本文主要讨论了在 Web 开发中遇到的中文乱码问题,并提供了一些解决方案。首先,需要确定中文乱码问题不是由浏览器引起的,然后讨论了 Tomcat 服务器配置和数据库 bean 配置中的一些...

    Intraweb12 解决汉字乱码问题

    在实际操作中,解决汉字乱码问题的步骤如下: 1. 卸载现有Intraweb版本:通过控制面板或第三方卸载工具,彻底卸载已安装的Intraweb组件,确保没有遗留的配置文件影响新版本的安装。 2. 安装Intraweb12:运行"iw...

    java解决中文乱码问题

    Java 解决中文乱码问题 Java 中文乱码问题是中国程序员无法避免的话题。乱码的出现是由于中文和英文的编码格式不同,解码也是不一样的。如果中国的程序员不会遇到乱码,那么只有使用汉语编程。Han语编程是怎么回事...

    linux解决中文乱码问题

    在Linux系统中,中文乱码问题常常困扰着用户,尤其是对于那些需要处理中文文本的开发者和运维人员。...通过以上方法,一般可以有效避免和解决中文乱码问题,使得在Linux环境中处理中文文本更加顺畅。

    解决中文乱码问题-java

    以下是对如何在Java中解决中文乱码问题的详细解析。 ### 解决中文乱码问题的核心思路 解决中文乱码的关键在于确保字符编码的一致性。当从不同的源(如网络请求、文件读取等)获取字符串时,必须明确知道其原始编码...

    jsp用过滤器解决中文乱码问题的方法.docx

    jsp 用过滤器解决中文乱码问题的方法 jsp(JavaServer Pages)是一种广泛应用于Web开发的技术,但是在实际开发中,我们经常会遇到中文乱码问题。为了解决这个问题,我们可以使用jsp过滤器来实现编码设置。我今天要...

    拦截器解决中文乱码问题

    "拦截器解决中文乱码问题"这个主题,主要关注的是如何通过使用拦截器(Interceptor)这一技术手段来预防或解决乱码现象。拦截器是Spring MVC框架中的一个重要组件,它可以对HTTP请求进行预处理和后处理,从而在数据...

    MySQL + JDBC彻底解决中文乱码问题

    ### MySQL + JDBC 彻底解决中文乱码问题 #### 一、引言 在使用 MySQL 数据库进行数据存储时,可能会遇到中文字符显示为乱码的问题。这种情况通常出现在数据库连接参数配置不当或数据库本身的字符集设置不正确时。...

    FORM表单中文乱码问题分析与解决

    解决方法:解决中文乱码问题的方法有两种,一种是使用POST方式,另一种是使用GET方式。 1、POST方式:在POST方式中,我们可以使用request.setCharacterEncoding("UTF-8")来指定解码方式为UTF-8。这将使服务器使用...

    中文乱码javaWEB开发各种解决中文乱码问题

    本文将详细探讨Java Web开发中解决中文乱码问题的策略,包括文件编码设置、页面编码控制、请求参数编码转换、过滤器应用以及GET请求特殊处理等。 #### 1. 文件编码设置 在Java Web项目中,确保所有文件(包括Java...

    彻底解决中文乱码的问题

    本篇文章将深入探讨这个问题,并提供一种彻底解决中文乱码问题的方法。 首先,我们需要理解什么是乱码。乱码通常出现在字符编码不匹配的情况下,即数据存储或传输时采用的编码格式与读取或显示时使用的编码格式不...

    Linux系统中文乱码解决完整方案

    本文档提供了两个解决方案:方法一是使用 Putty 代替 Secure Shell Client,修改窗口 Translation 中的 Received data assumed to be in which character set 值为 UTF-8,从而解决中文乱码问题。方法二是修改 Linux...

    FastReport-v4.7.22完全解决中文乱码问题

    标题 "FastReport-v4.7.22完全解决中文乱码问题" 指的是针对FastReport这款报表生成工具的一个特定版本(v4.7.22)的更新,该更新旨在解决在处理中文字符时出现的乱码问题。FastReport是一款流行的报表设计和打印...

Global site tag (gtag.js) - Google Analytics