当前位置:多学网学习教育电脑学习编程入门JSP教程jsp中文问题解决方案

jsp中文问题解决方案

[08-23 22:09:47]   来源:http://www.duoxue8.com  JSP教程   阅读:563
jsp中文问题解决方案,标签:JSP编程技巧,jsp开发,jsp实用教程,jsp视频教程,http://www.duoxue8.com

所以,虽然我们的Java源文件在出入口的地方指定了正确的编码方式,但其在容器内部运行时还是以ISO-885Array-1来处理的。

4、中文问题的分类及其建议最优解决办法

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

具体解决办法如下:

1、 针对直接在console上运行的类

对于这种情况,我们建议在程序编写时,如果需要从用户端接收用户的可能含有中文的输入或含有中文的输出,程序中应该采用字符流来处理输入和输出,具体来说,应用以下面向字符型节点流类型:

对文件:FileReader,FileWrieter

其字节型节点流类型为:FileInputStream,FileOutputStream

对内存(数组):CharArrayReader,CharArrayWriter

其字节型节点流类型为:ByteArrayInputStream,ByteArrayOutputStream

对内存(字符串):StringReader,StringWriter

对管道:PipedReader,PipedWriter

其字节型节点流类型为:PipedInputStream,PipedOutputStream

同时,应该用以下面向字符型处理流来处理输入和输出:

BufferedWriter,BufferedReader

其字节型的处理流为:BufferedInputeStream,BufferedOutputStream

InputStreamReader,OutputStreamWriter

其字节型的处理流为:DataInputStream,DataOutputStream

其中InputStreamReader和InputStreamWriter用于将字节流按照指定的字符编码集转换到字符流,如:

InputStreamReader in = new InputStreamReader(System.in,”GB2312″); OutputStreamWriter out = new OutputStreamWriter (System.out,”GB2312″);例如:采用如下的示例Java编码就达到了要求:

//Read.Java
import Java.io.*;
public class Read
{
public static void main(String[] args)
throws IOException
{
String str =
“\n中文测试,这是内部硬编码的串
“+”\ntest english character”;
String strin= “”;
BufferedReader stdin =
new BufferedReader(new
InputStreamReader(System.in,”gb2312″));
//设置输入接口按中文编码
BufferedWriter stdout =
new BufferedWriter(new
OutputStreamWriter(System.out,”gb2312″));
//设置输出接口按中文编码
stdout.write(”请输入:”);
stdout.flush();
strin = stdin.readLine();
stdout.write(”这是从用户输入的串:”+strin);
stdout.write(str);
stdout.flush();
}}

同时,在编译程序时,我们用以下方式来进行:

Javac -encoding gb2312 Read.Java

  2、针对EJB类和不可以直接运行的支持类(如JavaBean类)

由于这种类它们本身被其它的类调用,不直接与用户交互,故对这种类来说,我们的建议的处理方式是内部程序中应该采用字符流来处理程序内部的中文字符串(具体如上面一节中一样),同时,在编译类时用-encoding gb2312参数指示源文件是中文格式编码的即可。

3、针对Servlet类

针对Servlet,我们建议用以下方法:

在编译Servlet类的源程序时,用-encoding指定编码为GBK或GB2312,且在向用户输出时的编码部分用response对象的setContentType(”text/html;charset=GBK”);或gb2312来设置输出编码格式,同样在接收用户输入时,我们用request.setCharacterEncoding(”GB2312″);这样无论我们的servlet类移植到什么操作系统中,只有客户端的浏览器支持中文显示,就可以正确显示。如下是一个正确的示例:

//HelloWorld.Java
package hello;
import Java.io.*;
import Javax.servlet.*;
import Javax.servlet.http.*;
public class HelloWorld
extends HttpServlet
{
public void init()
throws ServletException
{
}
public void doGet
(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
request.setCharacterEncoding(”GB2312″);
//设置输入编码格式
response.setContentType
(”text/html;charset=GB2312″);
//设置输出编码格式
PrintWriter out = response.getWriter();
//建议使用PrintWriter输出
out.println(”


--------------------------------------------------------------------------------
”);
out.println(”Hello World!
This is created by Servlet!测试中文!”);
out.println(”
--------------------------------------------------------------------------------
”);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
request.setCharacterEncoding(”GB2312″);
//设置输入编码格式
response.setContentType
(”text/html;charset=GB2312″);
//设置输出编码格式
String name = request.getParameter(”name”);
String id = request.getParameter(”id”);
if(name==null) name=”";
if(id==null) id=”";
PrintWriter out = response.getWriter();
//建议使用PrintWriter输出
out.println(”
--------------------------------------------------------------------------------
”);
out.println(”你传入的中文字串是:” + name);
out.println(”
--------------------------------------------------------------------------------
你输入的id是:” + id);
out.println(”
--------------------------------------------------------------------------------
”);
}
public void destroy()
{
}
}


请用Javac -encoding gb2312 HelloWorld.Java来编译此程序。

测试此Servlet的程序如下所示:

text=”#000000″ topmargin=”5″>

“POST” target=”_self”>
value=”" size=”30″>

传给Servlet

  4、Java程序和数据库之间

为避免Java程序和数据库之间数据传递出现乱码现象,我们建议采用以下最优方法来处理:

1、对于Java程序的处理方法按我们指定的方法处理。

2、把数据库默认支持的编码格式改为GBK或GB2312的。

如:在mysql中,我们可以在配置文件my.ini中加入以下语句实现:

在[mysqld]区增加:

default-character-set=gbk

并增加:

[client]
default-character-set=gbk

在SQL Server2K中,我们可以将数据库默认的语言设置为Simplified Chinese来达到目的。

5、针对JSP代码

由于JSP是在运行时,由WEB容器进行动态编译的,如果我们没有指定JSP源文件的编码格式,则JSP编译器会获得服务器操作系统的file.encoding值来对JSP文件编译的,它在移植时最容易出问题,如在中文Windows2000中可以很好运行的jsp文件拿到英文linux中就不行,尽管客户端都是一样的,那是因为容器在编译JSP文件时获取的操作系统的编码不同造成的(在中文wink中的file.encoding和在英文Linux中file.encoding是不同的,且英文Linux的file.encoding对中文不支持,所以编译出来的JSP类就会有问题)。

网络上讨论的大多数是此类问题,多是因为JSP文件移植平台时不能正确显示的问题,对于这类问题,我们了解了Java中程序编码转换的原理,解决起来就容易多了。我们建议的解决办法如下:

上一页  [1] [2] [3] [4]  下一页


jsp中文问题解决方案 结束。
Tag:JSP教程JSP编程技巧,jsp开发,jsp实用教程,jsp视频教程电脑学习 - 编程入门 - JSP教程
jsp中文问题解决方案相关文章