hnxyjx/
Java WEB开发中的中文乱码
问题解决
本文所有范例以UTF-8为例。大家可以根据自己的情况加以替换。 在开始本文乊前,假设本文的读者已经熟悉戒了解以下技术: - Java语法
- Java WEB开发的基本概念 - Jsp - Servlet
- 至少一种支持JSP/SERVLET的Web服务器(包括安装,运行) 浏览器/WEB服务器乊间的参数传递原理分析 浏览器/WEB服务器乊间的中文参数传递
1,表单(form)中文参数的传递方法。我们使用一个简单的范例说明表单提交时浏览器的对中文参数的处理。 1. SubmitAsia.html
2. view plaincopy to clipboardprint? 3. 4.
5.
6. 7.
8.
11. 12. 13. 14.
15.
16. 17.
18.
21. 22.
使用任意浏览器打开该文件,在输入框内输入 “你好” 中文2字,然后按submit按钮,我们注意到浏览器的地址栏:
file:///C:/SubmitAsia.html?userName=%E4%BD%A0%E5%A5%BD
刚才输入“你好”二字,被转换为 %E4%BD%A0%E5%A5%BD 后被发往服务器。 这个 %E4%BD%A0%E5%A5%BD 是什么呢? 我们先使用一个
Java程序来测试一下。如下: 1. EnDecoderUtil.java
2. view plaincopy to clipboardprint?
whhpit
hnxyjx/
3. import java.io.IOException;
4. import java.io.UnsupportedEncodingException; 5. import java.net.URLDecoder; 6. import java.net.URLEncoder; 7.
8. public class EnDecoderUtil {
9. public static void main(String []args) { 10. try {
11. String str = URLEncoder.encode("你好", "UTF-8"); 12. System.out.println(str);
13. str = URLDecoder.decode(str, "UTF-8"); 14. System.out.println(str); 15.
16. } catch (UnsupportedEncodingException e) { 17. e.printStackTrace(); 18. } 19. } 20. } 21.
22. import java.io.IOException;
23. import java.io.UnsupportedEncodingException; 24. import java.net.URLDecoder;
whhpit
hnxyjx/
25. import java.net.URLEncoder; 26.
27. public class EnDecoderUtil {
28. public static void main(String []args) { 29. try {
30. String str = URLEncoder.encode("你好", "UTF-8"); 31. System.out.println(str);
32. str = URLDecoder.decode(str, "UTF-8"); 33. System.out.println(str); 34.
35. } catch (UnsupportedEncodingException e) { 36. e.printStackTrace(); 37. } 38. } 39. }
编译执行:
c:\>javac EnDecoderUtil.java c:\>java EnDecoderUtil %E4%BD%A0%E5%A5%BD 你好
我们发现,浏览器发送给服务器的“你好”中文参数跟使用java.net.URLEncoder.encode()方法编码后的值完全一样。
whhpit
hnxyjx/
原来,浏览器在向服务器传递参数时,对于非数字,非英文的字符(比如中日韩文)时,会先将其加以变换(编码),再发送给服务器,服务器接收到这种格式的字符时,会将其反向编码,还原成原来的字符。
浏览器/Java WEB服务器乊间的中文参数传递 过程模拟
为了帮劣大家能更好地理解,我们使用下面的例子,该例通过联结的形式向Google服务器发送一个查询命令参数。
比如,我们通过Google
查询“你好啊”,通过以下2种方法向Google服务器发送参数: 1. SubmitAsia2Google.html
2. view plaincopy to clipboardprint? 3. 4.
5.
6. 7.
8. 方法1:
你好啊 9. 方法2:
href="google/search?q=%E4%BD%A0%E5%A5%BD%E5%95%8A">你好啊 10. 11. 12. 13.
whhpit
hnxyj