servlet之网页输入文本不在网页编码的映射值范围内,怎么获取正确值。

本文详细介绍了在处理BIG5编码的网页时,如何正确地在Servlet中处理非BIG5字符的输入问题。通过对比GET和POST两种网页数据提交方式的编码差异,并提供了解决方案,即采用POST方式提交并设置正确的编码,同时使用Apache的commons-lang3-3.3.jar包对请求数据进行解码,确保获取到正确的中文信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

        BIG5网页上输入非BIG5字符,servlet如何处理才能得到正确的中文呢?

今天这个问题在平常很少会遇见,一般都是把网页的编码设计成统一的“UTF-8”或者“GBK”就可以,因为他们基本上包含了人们所要用到的所有字符编码。但是通过今天的学习,我不仅仅是把问题给解决了,同时也对GETPOST这两种网页数据提交方式更加的了解。下面,我们就来解决这个问题。

首先对“form表单提交数据编码方式和tomcat接受数据解码方式的思考。”

1.GET提交(非实体提交数据)

对于GET方法来说,都是把数据串联在请求的url后面作为参数。浏览器会对URL进行URL encode,然后发送给服务器。对于中文来说对于中文IE,如果在高级选项中选中总以UTF-8发送(默认方式),则PathInfoURL Encode是按照UTF-8编码,QueryString是按照GBK编码。

 

URL的组成:
域名:端口/contextPath/servletPath/pathInfo?queryString

request.getParameter("name"); 

// 获得queryString的参数值(来自于getpost),其值经过Servlet服务器URL Decode过的
request.getPathInfo(); 

// 注意:pathinfo返回的字符串是经过Servlet服务器URL Decode过的。
    requestURI = request.getRequestURI(); 

// 内容为:contextPath/servletPath/pathinfo 浏览器提交过来的原始数据,未被Servlet服务器URL Decode过。

 

对于中文的firefox,则pathInfoqueryString都是URL encode按照GBK编码的。

不同的浏览器以及同一浏览器的不同设置,都会影响最终URLPathInfo的编码。URL中如果含有中文等非ASCII字符,则应该避免使用GET的提交方式。

 

2.POST提交(实体提交数据,在后台运行)

对于POST方式,也是要进行URL编码的。但是POST提交表单中的参数值是根据网页的编码(ContentType("text/html; charset=GBK")中指定的编码)进行对表单中的数据URL编码,然后发给服务器的。我们可以在服务器端的程序中设置Request.setCharacterEncoding()设置编码,然后去的争取的参数数据。

经过上述说明,值得注意的是GET提交数据的编码方式不依赖与网页的编码方式,而是依赖于浏览器端的URL编码,POST则是根据网页的编码进行数据编码,也就是说这样对URL及网页中的编码使用同一个编码是比较合适的。这样做的代码和工作效益都是最好的。

 

3.解决方式

网页的编码采用BIG5,在form表单提交时采用POST提交。

 <form  action="/day04/servlet/savaFile.do"  method="post">

     name:<input type="text" name="text" maxlength="20" size="20"/>

     <br/><input type="submit" value="送出">

    </form>

 

服务器端需要用到一个apachecommons-lang3-3.3.jar包。在对读取request请求数据进行同一编码设置后,获取文本框内容,然后利用StringEscapeUtils.unescapeHtml4(text),进行获取正确的值(text需要是HTML实体

 

request.setCharacterEncoding("BIG5");

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

String unescape = StringEscapeUtils.unescapeHtml4(text);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值