带有外国字符的url的response.sendredirect - 如何编码?

时间:2011-04-21 15:32:24

标签: java unicode utf-8 character-encoding response.redirect

我有一个拥有国际用户的jsf应用程序,所以表单输入可以有非西方字符串,如kanjii和chinese - 如果我点击我的网址...?q =东日本大页面上的输出是正确的,我看到了我的表单中的输入填充得很好。但是,如果我将相同的字符串输入到我的表单并提交,我的应用程序在构建url后使用url中的填充参数进行重定向(看起来多余,但这是由于第三方集成)但重定向不是编码正确的字符串。我有

url = new String(url.getBytes("ISO-8859-1"), "UTF-8");
response.sendRedirect(url);

但url重定向最终成为q = ????我已经在String构造函数中使用了各种编码字符串(在ISO和UTF-8中切换,并且在URL中只有一堆乱码),但似乎没有一个工作到我得到的地方q =东日本大任何关于什么的想法我需要做的是在重定向中正确填充q =东日本大?感谢。

2 个答案:

答案 0 :(得分:0)

尝试

response.setContentType("text/html; charset=UTF-16");
response.setCharacterEncoding("utf-16");

答案 1 :(得分:0)

你是如何制作url的? URI不能直接包含非ASCII字符;必须将它们转换为字节(使用特定编码),然后转换为% - 编码。

应该给

URLEncoder.encode一个编码参数,以确保这是正确的编码。否则你会得到默认编码,这可能是错误的,总是要避免。

String q= "\u6771\u65e5\u672c\u5927"; // 東日本大

String url= "http://example.com/query?q="+URLEncoder.encode(q, "utf-8");
// http://example.com/query?q=%E6%9D%B1%E6%97%A5%E6%9C%AC%E5%A4%A7

response.sendRedirect(url);

此URI将在浏览器地址栏中显示为IRI“http://example.com/query?q=东日本大”。

确保您将页面作为UTF-8(使用Content-Type标头/元)并将查询字符串输入解释为UTF-8(特定于服务器;请参阅this faq以获取Tomcat。)