首页 文章

encodeURIComponent使用ISO-8859-1编码为javascript字符串[复制]

提问于
浏览
3

这个问题在这里已有答案:

我一直在尝试这项工作但到目前为止还没有运气 . 我不清楚最新情况,但我会尽力解释 . 我的服务器端jsp页面都使用ISO-8859-1编码,我不想改变 . 所有请求/响应都是xml格式 . POST请求当前正在使用javascript escapeURIComponent 函数,一切正常,直到有一个特殊字符,例如字符串:hello°world©®™test . 当这个字符串从IE中被POST(带有 escapeURIComponent 到数据部分)时,当重新加载该页面时应该得到相同的字符串,该字符串呈现为:hello°world©’¢test

我假设发生了这种情况,因为 encodeURIComponent 函数将字符串编码为UTF-8,而不是ISO-8859-1,并且当页面呈现时,UTF-8被解释为ISO-8859-1字符,因此显示字符串乱码 .

有没有办法解决这个问题,而无需将网页转换为UTF-8字符集?

POST请求的Content-Type设置为“application / x-www-form-urlencoded”

提前致谢 .

1 回答

  • 7

    首先,我强烈建议您放弃对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"的表单中 .

    如果你传递的是你自己传递的内容,那么你需要在你的任何servlet容器上设置 URIEncoding ,请参阅this question's answer .

相关问题