ÙرØبا想知道字符的编码

时间:2016-12-20 08:54:57

标签: java jsp servlets

我正在将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){}}

1 个答案:

答案 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