java 中文乱码问题 utf-8和gbk的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 中文乱码问题 utf-8和gbk的区别相关的知识,希望对你有一定的参考价值。

我在写servlet小程序的时候,遇到一个问题。比方说
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet

private static final long serialVersionUID = 6189969869246489166L;

public void doPost(HttpServletRequest aHSRequest, HttpServletResponse aHSResponse)
throws ServletException, IOException

aHSResponse.setContentType("text/html;charset=utf-8");
PrintWriter pW = aHSResponse.getWriter();
pW
.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
pW.println("<HTML>");
pW.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
pW.println(" <BODY>");
aHSRequest.setCharacterEncoding("utf-8");
pW.print(" <h1 align='center'> 注册成功 </h1> ");
pW.println(" <hr color='#3300FF' size='3'> ");
pW.print("您的用户名为:" + aHSRequest.getParameter("UserName")+"<br>");
pW.print("您的密码为:" + aHSRequest.getParameter("Password"));
pW.println(" </BODY>");
pW.println("</HTML>");
pW.flush();
pW.close();




结果还是出现了乱码。但是把utf-8改成gbk就好了。哪位仁兄来解释下。

我用的是myeclipse。web.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/servlet/LoginServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

参考技术A 这其中存在一个转换问题:
如System.out.println(new String("中国".getBytes("gbk"), "utf-8"));
System.out.println(new String("中国".getBytes("utf-8"), "gbk"));
//将“中国“的gbk编码格式按着utf-8解析,或者反过来都会出现乱码。
如浏览器当前为gbk编码,就以gbk编码格式来提交。 这本身是不会出现乱码的,问题就出在Web服务器接收数据的时候,HttpServletRequest在将客户端传来的数据转成ucs2码上出了问题。在默认情况下,是按着iso-8859-1编码格式来转的,而这种编码格式并不支持中文,所以也就无法正常显示中文了,解决这个
问题的方法是用和客户端浏览器当前编码格式一致的编码来转换,如果是utf-8,则在doPost方法中应该用以下的语句来处理:
request.setCharacterEncoding("utf-8");本回答被提问者和网友采纳
参考技术B 字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。

至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8节省空间。

GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。

GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不是国家标准)
UTF-8编码的文字可以在各国各种支持UTF8字符集的浏览器上显示。
比如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,而无需他们下载IE的中文语言支持包。 所以,对于英文比较多的论坛 ,使用GBK则每个字符占用2个字节,而使用UTF-8英文却只占一个字节。

UTF8是国际编码,它的通用性比较好,外国人也可以浏览论坛,GBK是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大
参考技术C 关注
专家
参考技术D 我刚才使用过 将GBK转换成UTF-8会出现乱码 我是先拆后组 可能是两种类型不能适应吧 如果可以的话 尽量用GBK

如何把js获取url中文乱码转码

GBK与UTF-8的转码:
  iconv("gbk","utf-8","php中文转码");//把中文gbk编码转为utf8
  iconv("utf-8","gbk","php中文转码");//把中文utf8编码转为gbk
一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码:
1.传参页面
Javascript代码:<script type=”text/javascript”>// <![CDATA[
function send()
var url = "test01.html";
var userName = $("#userName").html();
window.open(encodeURI(url + "?userName=" + userName));
// ]]>
</script>
2. 接收参数页面:test02.html
<script>
var urlinfo = window.location.href;//获取url
var userName = urlinfo.split(“?”)[1].split(“=”)[1];//拆分url得到”=”後面的参数
$(“#userName”).html(decodeURI(userName));
</script>
二:如何获取Url“?”后,“=”的参数值:
A.首先用window.location.href获取到全部url值。
B.用split截取“?”后的全部
C.split(“?”)后面的[1]内数字,默认从0开始计算
参考技术A

一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码:1.传参页面Javascript 代码:<script type=”text/ javascript ”>// <![CDATA[function send()var url = "test01.html";var userName = $("#userName").html();window.open(encodeURI(url + "?userName=" + userName)); // ]]>

GBK与UTF-8的转码:iconv("gbk","utf-8","php中文转码");//把中文gbk编码转为utf8iconv("utf-8","gbk","php中文转码");//把中文utf8编码转为gbk。

以上是关于java 中文乱码问题 utf-8和gbk的区别的主要内容,如果未能解决你的问题,请参考以下文章

如何解决GBK转换UTF-8乱码问题

GBK与UTF-8多次转换乱码问题,急求解!

Java 中文字符串编码之GBK转UTF-8

utf-8和base64啥区别啊?

理解并解决GBK转UTF-8奇数中文乱码(转)

java读取linux下文件名乱码