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

 沫雅mo_853 发布于 2023-02-12 16:17

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

提前致谢.

1 个回答
  • 首先,我强烈建议您放弃对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,请看这个问题的答案.

    2023-02-12 16:20 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有