java session 乱码_Java中常见的几个乱码问题以及解决方法

1.ajax--URL中的参数含中文,后台接受的参数出现乱码

解决方法:

第一步:在javascript中,对url进行两次编码

url = "http://localhost:8080/MyData/SearchTopicServlet?topic="+topic;

url=encodeURI(url);

url=encodeURI(url);//记得一定是编码两次

第二步:在servlet中,对获取的参数进行解码

String topic=request.getParameter("topic");

topic = java.net.URLDecoder.decode(topic, "UTF-8");

2.servlet返回给ajax的中文乱码

解决方法:

在servlet中添加下面这一句话:

response.setContentType("text/xml;charset=utf-8");

3.TXT文件中含中文,读入以后,中文出现乱码

解决方法:

br=new BufferedReader(new InputStreamReader(new FileInputStream("E:\\encodeBook.txt"),"UTF-8"));

Java中文件读入,读取的编码原理:

Reader 类是 Java 的 I/O 中读字符的父类,而 InputStream 类是读字节的父类,InputStreamReader 类就是关联字节到字符的桥梁,它负责在 I/O 过程中处理读取字节到字符的转换,而具体字节到字符的解码实现它由 StreamDecoder 去实现,在 StreamDecoder 解码过程中必须由用户指定 Charset 编码格式。值得注意的是如果你没有指定 Charset,将使用本地环境中的默认字符集,例如在中文环境中将使用 GBK 编码.

46ec25f88dc15a8fb2795fe0b09b2bf2.png

Java的I/O类处理图

4.URL中的编码问题:

解决方法:

1 importjava.net.URLDecoder;2

3 importjava.net.URLEncoder;4

5 public classURLDecoderTest {6

7 public static void main(String[] args) throwsException {8

9 //将application/x-www-form-urlencoded字符串10

11 //转换成普通字符串12

13 //必须强调的是编码方式必须正确,如baidu的是gb2312,而google的是UTF-8

14

15 String keyWord = URLDecoder.decode("%E6%96%87%E6%A1%A3", "gb2312");16

17 System.out.println(keyWord);18

19

20

21 //将普通字符串转换成22

23 //application/x-www-form-urlencoded字符串24

25 //必须强调的是编码方式必须正确,如baidu的是gb2312,而google的是UTF-8

26

27 String urlStr = URLEncoder.encode("文档", "gb2312");28

29 System.out.println(urlStr);30

31 }32

33 }

原理:

1.application/x-www-form-urlencoded是一种编码类型。

这种类型会:

1.字符"a"-"z","A"-"Z","0"-"9",".","-","*",和"_" 都不会被编码;

2.将空格转换为加号 (+) ;

3.将非文本内容转换成"%xy"的形式,xy是两位16进制的数值;

4.在每个 name=value 对之间放置 & 符号。

2。网页中的表单使用POST方法提交时,数据内容的类型是 application/x-www-form-urlencoded,我们经常会在浏览器的地址栏里看到这样的字串%E6%96%87%E6%A1%A3,这就是被编码后的字符串。

3.UrlEncoder是将普通字符串转换成application/x-www-form-urlencoded字符串。

5.servlet中的乱码问题:

1.若接受到的字段为乱码:

缺少了这一句话:request.setCharacterEncoding("utf-8");

2.跳转后的页面出现乱码:

缺少了这一句话:response.setContentType("text/html");

并且session之前不可以有out 输出

6。JS动态给html页面赋值,出现乱码

js文件中出现这种给html页面动态添加内容时,添加内容若是中文,注意在jsp页面中设置编码,否则会出现乱码。

js中为:$('userpwd_error').innerHTML = "wrong.gif密码不能为空";

修改方法:

在jsp中如下设置:

1.

2.

3.

4.

5.

6.

7.

8.

9.

其实就是第二行charset惹的祸,第二行主要是设定了整个页面的字符编码方式,在此例中是UTF-8。

而在JS中是普通的GB2312或者是GBK编码方式。所以会产生乱码。注意第三行最后的charset=”GB2312″。

7.超链接传参,参数是中文时,后台接收的参数是乱码

在jsp中:

οnclick="return confirm('确定删除该用户吗?')">

后台接收时如下设置,中文则不会出现乱码:

String id=request.getParameter("id");

String username=new String(request.getParameter("username").getBytes("ISO-8859-1"),"utf-8");

String password=request.getParameter("password");

String authority=request.getParameter("authority");

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SessionJava Web常用的一种状态管理技术,它可以在不同的HTTP请求之间共享数据,常用于用户登录、购物车等场景。下面我来浅谈一下Session的使用。 Session的创建 在Servlet,可以通过HttpServletRequest的getSession()方法来获取或创建Session对象。如果请求已经存在Session,则返回已经存在的对象,否则创建一个新的Session对象并返回。示例代码如下: ```java HttpSession session = request.getSession(); ``` Session的存储 Session的数据存储在服务器端,可以通过setAttribute()方法Session存储数据。示例代码如下: ```java session.setAttribute("username", "张三"); ``` Session的获取 在Session存储的数据可以通过getAttribute()方法获取。示例代码如下: ```java String username = (String) session.getAttribute("username"); ``` Session的过期 Session有两种过期方式:基于时间的过期和基于使用次数的过期。基于时间的过期是指Session在一定时间内没有被使用,则失效;基于使用次数的过期是指Session在一定时间内没有被使用,则失效。 在web.xml可以设置Session的过期时间,示例代码如下: ```xml <session-config> <session-timeout>30</session-timeout> </session-config> ``` 上述代码表示Session的过期时间为30分钟。 Session的销毁 Session可以通过invalidate()方法销毁。示例代码如下: ```java session.invalidate(); ``` 总结 SessionJava Web常用的一种状态管理技术,可以在不同的HTTP请求之间共享数据。Session的使用需要注意过期时间和销毁方式,以免造成安全隐患和资源浪费。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值