encodeURIComponent使用ISO-8859-1编码为javascript字符串

时间:2013-12-05 20:07:48

标签: javascript utf-8 character-encoding iso-8859-1

我一直在尝试这项工作但到目前为止还没有运气。 我不清楚最新情况,但我会尽力解释。 我的服务器端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”

提前致谢。

1 个答案:

答案 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