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