我正在从 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/