我一直在尝试这项工作但到目前为止还没有运气。
我不清楚最新情况,但我会尽力解释。
我的服务器端jsp页面都使用ISO-8859-1编码,我不想改变。
所有请求/响应都是xml格式。
POST请求当前正在使用javascript escapeURIComponent
函数,一切都运行良好,直到有一个特殊字符,例如字符串:hello°world©®™test。当这个字符串从IE中被POST(带有escapeURIComponent
到数据部分)时,当重新加载页面时应该得到相同的字符串,字符串呈现为:hello°world©•test < / p>
我假设发生了这种情况,因为encodeURIComponent
函数将字符串编码为UTF-8,而不是ISO-8859-1,当页面呈现时,UTF-8被解释为ISO-8859 -1个字符,因此显示字符串乱码。
如果不将网页转换为UTF-8字符集,有没有办法解决这个问题?
POST请求的Content-Type设置为“application / x-www-form-urlencoded”
提前致谢。
答案 0 :(得分:7)
首先,我强烈建议您放弃对ISO-8859-1的忠诚并转而使用UTF-8作为一般性原则;然而,这不会解决你的直接问题,所以让我们把这场战斗留下来。
encodeURIComponent
始终使用UTF-8。这不能改变;虽然你可以手动破解编码encodeURIComponent
产生的百分比,但我认为这不会有效地利用任何人的时间。
根据您的描述,我实际上会将问题放回去:您的服务器认为字符串中包含那些字符,因此会向浏览器发送显示这些字符的必要代码。只需更改服务器输出的编码只会导致服务器发送UTF-8代码,而不是实际帮助。
所以问题是:我们如何告诉服务器传入的数据是百分比编码的UTF-8而不是服务器显然认为百分比编码8859-1?
您没有在帖子中指定您发送的字符串是作为URL的一部分发送的(也就是说,您正在发布到http://myserver/mypage.jsp?theString=hello%C2%B0world%C2%A9%C2%AE%E2%84%A2test
之类的某些URL)或作为POST的一部分身体。通常使用POST,您可以将数据作为POST正文的一部分发送。如果是这种情况,请尝试添加
<% request.setCharacterEncoding("UTF-8"); %>
到jsp的顶部 - 它告诉服务器将传入的请求解释为UTF-8,即使传出的东西仍然是8859-1。如果您有任何<form>
元素指向此页面,则应在表单中添加accept-charset属性“UTF-8”。
如果您传递的内容是URL本身,那么您需要在您正在使用的任何servlet容器上设置URIEncoding
;如果是Tomcat,请参阅this question's answer。