use*_*550 1 character-encoding
我有一个servlet接受HTML内容作为请求参数的一部分.HTML是本地化的,可以是法语,西班牙语等......内容.我还使用apache HTTP客户端向此servlet发出请求以进行测试,其具有以下标头定义:
HttpClient client = new HttpClient();
PostMethod method = new PostMethod("<URL>");
String html = FileUtils.readFileToString(inputHTMLFile, "UTF-8");
method.addParameter("html", html);
method.addRequestHeader("Accept", "*/*");
method.setRequestHeader("accept-charset", "UTF-8");
Run Code Online (Sandbox Code Playgroud)
无论读取什么HTML都有字符编码utf-8,示例文本:
Télécharger un fichier
Run Code Online (Sandbox Code Playgroud)
但是,当我从请求参数中获取文本变为html时 T?l?charger un fichier
我浏览了一些链接,例如http://www.oracle.com/technetwork/articles/javase/httpcharset-142283.html,其中讨论了charset以及浏览器通常如何编码特殊字符.如果我使用UTF-8对html进行URLEncode,然后在servlet中使用相同的字符集解码,我会按预期获得HTML.
这是我唯一能做的就是保留这些字符集吗?我错过了什么吗?
谢谢.
既然修复了文件本身的问题,请尝试修改代码,如下所示:
HttpClient client = new HttpClient();
PostMethod postMethod = new PostMethod("<URL>");
postMethod.getParams().setContentCharset("utf-8"); //The line I added
...
Run Code Online (Sandbox Code Playgroud)
请注意,客户端现在需要将请求解码为UTF-8.法语和西班牙语正常工作,因为它们的字符包含在默认的ISO-8859-1字符集中.汉字不是.如果在客户端上正确解码了法语和西班牙语,则客户端将请求解码为ISO-8859-1,并且发送UTF-8可能会失败.
所以你可以尝试添加这个:
postMethod.setRequestheader("Content-Type", "application/x-www-form-url-encoded; charset=utf-8");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8335 次 |
| 最近记录: |