【问题标题】:ÙØ±Ø­Ø¨Ø§ want to know encoding of the charactersÙØ±ØØ¨Ø§想知道字符的编码
【发布时间】:2017-05-05 10:14:08
【问题描述】:

我正在将 مرحبا 字符从 JSP 发送到 servlet,并且在 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){}}

【问题讨论】:

  • 文件 file = new File(str); InputStreamReader r = new InputStreamReader(new FileInputStream(file)); System.out.println("接收字符串的编码:"+r.getEncoding());
  • 你最好把你发送和接收的sn-p贴出来。

标签: java jsp servlets


【解决方案1】:

它或多或少是一个 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 编码。一般&lt;form accept-charset="UTF8" ...&gt;应该够用了

在 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 中 &lt;Connector&gt; 元素上的 URIEncoding 属性设置为预期的字符集:URIEncoding="UTF-8"refs

【讨论】:

  • 为什么它会像 GET 请求那样被转换?
  • 以及如何在 Tomcat 7 中获取 UTF-8 字符而不在 server.xml 中添加 URI-Encoding。
  • 用于 GET 请求
  • 这很有帮助,谢谢 Serge Ballesta
  • 嗨 Serge Ballesta... 我正在从 JSP 和使用 getParameter 的 servlet 中传递 مرحبا 字符,我正在捕获值并打印该值。它是这种格式,'مرحبا'现在我想将其转换为 UTF-16 字符串并将其存储在数据库中。当我从 DB 中检索时,我想再次将其转换为该 HTML 代码。我正在使用 JSP,页面编码是 ISO-8859-1、Servlet、Tomcat 7,它是 GET 请求。你能帮帮我吗?
猜你喜欢
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
相关资源
最近更新 更多