java - ÙرØءا想知道字符的编码

标签 java jsp servlets

我正在从 JSP 向 servlet 发送 Ámbar 字符,并且在 servlet 中我接收到这种格式的字符:ÙرØØا§。我想知道哪一个正在转换这个以及他们正在使用哪种编码。

如果我在 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){}}

最佳答案

它或多或少是一个 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,您可以在 <Connector> 上设置 URIEncoding 属性。将 server.xml 中的元素更改为预期的字符集:URIEncoding="UTF-8"refs

关于java - ÙرØءا想知道字符的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41238204/

相关文章:

java - WinAnt 出现一些问题 --> 命令 "ant"不存在或写错了?

java - 在 Spring Boot 中将日期作为请求参数处理出现错误

java - 使用特定 key 创建将过期的链接的过程是什么?

java - 如何选择所有具有相同名称的输入插入到Mysql中?

java - HttpServlet 类与 Jersey 的混淆

java - 是否可以在http请求中获取输入设备详细信息

java - TagSupport 中的 ID

java - 如何跟踪 Java 中的内存泄漏?

jsp - 如何在多部分发布请求中传递参数

java - Spring MVC 将模型作为 dto 传递给表单?