相关疑难解决方法(0)

为什么POST不尊重charset,但是AJAX请求呢?tomcat 6

我有一个基于tomcat的应用程序,需要提交一个能够处理utf-8字符的表单.通过ajax提交时,数据从utf-8中的getParameter()正确返回.通过表单发布提交时,数据将从iso-8859-1中的getParameter()返回.

我使用了fiddler,并确定了请求的唯一区别,就是在ajax调用中将charset = utf-8附加到Content-Type头的末尾(正如预期的那样,因为我明确地发送了内容类型).

来自ajax的ContentType:"application/x-www-form-urlencoded; charset = utf-8"

来自表单的ContentType:"application/x-www-form-urlencoded"

我有以下设置:

ajax post(正确输出字符):

$.ajax( {
  type : "POST",
  url : "blah",
  async : false,
  contentType: "application/x-www-form-urlencoded; charset=utf-8",
  data  : data,
  success : function(data) { 
  }
 });
Run Code Online (Sandbox Code Playgroud)

表格帖子(在iso中输出字符)

 <form id="leadform" enctype="application/x-www-form-urlencoded; charset=utf-8" method="post" accept-charset="utf-8" action="{//app/path}">
Run Code Online (Sandbox Code Playgroud)

xml声明:

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

文档类型:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Run Code Online (Sandbox Code Playgroud)

元标记:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
Run Code Online (Sandbox Code Playgroud)

jvm参数:

-Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用request.setCharacterEncoding("UTF-8"); 但似乎tomcat只是忽略了它.我没有使用RequestDumper阀门.

根据我的阅读,POST数据编码主要取决于表单所在的页面编码.据我所知,我的页面在utf-8中正确编码.

此页面中的示例JSP正常工作.它只使用setCharacterEncoding("UTF-8"); 并回复您发布的数据. http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

总而言之,post请求不会将charset作为utf-8发送,尽管页面在utf-8中,表单参数指定utf-8,xml声明或其他任何内容.我已经花了三天的时间来完成这项工作,但我的想法已经不多了.谁能帮我?

java ajax tomcat servlets character-encoding

24
推荐指数
1
解决办法
1万
查看次数

如何让这段代码提交一个带有jQuery/Ajax工作的UTF-8表单textarea?

我在使用Ajax提交包含UTF-8字符串的表单时遇到问题.我正在开发一个在Tomcat服务器上运行的Struts Web应用程序.这是我设置为使用UTF-8的环境:

  • 我已经添加的属性URIEncoding="UTF-8" useBodyEncodingForURI="true"Connector标签到Tomcat的conf/server.xml文件.

  • 我有一个utf-8_general_ci数据库

  • 我正在使用下一个过滤器来确保我的请求和响应以UTF-8编码

    package filters;
    
    import java.io.IOException;
    import javax.servlet.*;
    
    public class UTF8Filter implements Filter {
        public void destroy() {}
    
        public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            chain.doFilter(request, response);
        }
    
        public void init(FilterConfig filterConfig) throws ServletException {
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 我在WEB-INF/web.xml中使用此过滤器

  • 我正在使用我的JSON响应的下一个代码:

    public static void populateWithJSON(HttpServletResponse response,JSONObject json)
    {
       String CONTENT_TYPE="text/x-json;charset=UTF-8";
       response.setContentType(CONTENT_TYPE);
       response.setHeader("Cache-Control", "no-cache");
       try {
            response.getWriter().write(json.toString());
       } catch (IOException e) { …
    Run Code Online (Sandbox Code Playgroud)

java ajax jquery encoding jsp

20
推荐指数
1
解决办法
4万
查看次数

servlet中的编码问题

我有一个servlet从客户端接收一些参数,然后做一些工作.来自客户端的参数是中文,所以我经常在服务器中得到一些无效字符.例如:如果我进入

http://localhost:8080/Servlet?q=??&type=test
Run Code Online (Sandbox Code Playgroud)

然后在servlet中,'type'的参数是正确的(test),但是'q'的参数没有正确编码,它们变成无法解析的无效字符.

但是,如果我再次进入加法器栏,则网址将更改为:

http://localhost:8080/Servlet?q=%D6%D0%CE%C4&type=test
Run Code Online (Sandbox Code Playgroud)

现在我的servlet将获得'q'的正确参数.

问题是什么?

UPDATE

顺便说一下,当我用帖子发送表格时,它很好.我将它们发送到ajax中,例如:

url="http://..q='??',
xmlhttp.open("POST",url,true); 
Run Code Online (Sandbox Code Playgroud)

然后服务器端也获得无效字符.

似乎只有当中文字符编码为%xx时,服务器端才能获得正确的结果.

这就是说http://.../q=??不起作用, http://.../q=%D6%D0%CE%C4工作.

但为什么" http://www.google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&q=%E4%B8%AD%E6%96%87&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&aqi=&aql=&oq=&gs_rfai="工作? 替代文字

java unicode servlets character-encoding

3
推荐指数
1
解决办法
9641
查看次数

标签 统计

java ×3

ajax ×2

character-encoding ×2

servlets ×2

encoding ×1

jquery ×1

jsp ×1

tomcat ×1

unicode ×1