我正在将JSP中的مرحبا字符发送到servlet,而在servlet中我正在接收这种格式的字符ÙرØبا。我想知道哪一个正在转换它以及它们正在使用哪个encoidng。
如果我在POST方法中传递这些字符,我将按原样接收数据。
我正在使用JDK 1.6,Tomcat 7。
这是JSP。
<%@page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><form method="get" action="register">
Name:<input type="text" name="userName"/><br/><br/>
<input type="submit" value="SUBMIT"/>
</form></body></html>
这是servlet。
public class Register extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
System.out.println("System: file.endcoding=" + System.getProperty("file.encoding"));
String str= request.getParameter("userName").trim();
RequestDispatcher rd = request.getRequestDispatcher("Display.jsp");
System.out.println("before encoding and decoding the string : "+str);
request.setAttribute("beforeconvert",str);}catch(Exception e){}}
答案 0 :(得分:2)
它或多或少是UTF8编码的字符串,解码为Latin1。
原始字符串"مرحبا"
由具有以下Unicode代码点的字符组成:'0x645','0x631','0x62d','0x628','0x627'
当编码为UTF8时,它给出:'\ xd9 \ x85 \ xd8 \ xb1 \ xd8 \ xad \ xd8 \ xa8 \ xd8 \ xa7'当解释为Latin1时给出:"ÙرØبا"
。字符'\x85'
通常在Latin1中不可打印。但是,你在问题中给出的字符串就足以作为UTF8进行无法解码了。
正如您所说使用POST方法,您应该能够以表格声明数据将是UTF8编码的。通常<form accept-charset="UTF8" ...>
应该足够了
在GET请求中,无法指定任何编码。您必须决定如何解释它们。你必须这样做:
在应用程序级别明确地说:
Charset u8 = Charset.forName("UTF-8");
Charset l1 = Charset.forName("ISO-8859-1");
String utf8String = u8.decode(l1.encode(str)).toString();
或要求servlet容器为您完成。对于Tomcat,您可以将server.xml中<Connector>
元素上的URIEncoding属性设置为预期的字符集:URIEncoding="UTF-8"
。
refs