字符串里有中文怎处理

字符串里有中文,在一些情况下会导致出错。比如放在cookie时如果带有中文就会错。
思路:把字符串先统一化成UTF-8编码,之后再变回来即可。
自己写了一个test.jsp,代码如下:

注:需要用到两个类,java.net.URLEncoder和java.net.URLDecoder

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.net.URLDecoder" %>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<%
    String str="2015年10月";   //带有汉字
    String inner_str=URLEncoder.encode(str,"UTF-8");  //转化为内部的utf-8编码
    String str_new= URLDecoder.decode(inner_str,"UTF-8");   //再将内部的utf-8编码重新变为真正的字符串
%>
inner_str=&nbsp; &nbsp;<%= inner_str %>
<br>
str_new=&nbsp;&nbsp; <%= str_new %>
</body>
</html>

结果如下:
inner_str=   2015%E5%B9%B410%E6%9C%88 
str_new=   2015年10月 

方法2:
先转化为字节数组,之后再转回来
参见test2.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@ page import="java.util.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
String s = "你好";  
System.out.println("开始");

//编码  
byte[] utf = s.getBytes("utf-8");  //得到用utf-8编码的字节数组
byte[] gbk = s.getBytes("gbk");    //得到用gbk编码的字节数组

System.out.println("utf-8编码:" + Arrays.toString(utf)); //
System.out.println("gbk编码:" + Arrays.toString(gbk)); // 
//解码  
String s1 = new String(utf, "utf-8"); 
String s2 = new String(gbk, "gbk");// 
String s3 = new String(gbk, "utf-8");// 

System.out.println("--------------------");  
System.out.println("utf-8解码:" + s1);  
System.out.println("gbk解码:" + s2);  
System.out.println("gbk用utf-8解码:" + s3);  
%>
</body>
</html>

结果:

开始
utf-8编码:[-28, -67, -96, -27, -91, -67]
gbk编码:[-60, -29, -70, -61]
--------------------
utf-8解码:你好
gbk解码:你好
gbk用utf-8解码:???

乱码案例:

index.jsp中

<a href="show.jsp?name=张三&sex=男">解决中文乱码</a>

show.jsp中

<body>   
    name参数的值为:<%=new String(request.getParameter("name").getBytes("iso-8859-1"),"UTF-8") %>
    <br>
    sex参数的值为:<%=request.getParameter("sex") %>
</body>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值