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

| 我有一个具有国际用户的jsf应用,因此表单输入中可以包含非西方字符串,例如kanjii和Chinese-如果我使用..?q =东日本大的网址,则页面上的输出是正确的,并且我看到的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 =东日本大填充到重定向中?谢谢。     
已邀请:
您如何制作
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(特定于服务器;请参见Tomcat的常见问题解答。)     
尝试
response.setContentType(\"text/html; charset=UTF-16\");
response.setCharacterEncoding(\"utf-16\");
    

要回复问题请先登录注册