【问题标题】:encodeURIComponent using ISO-8859-1 encoding for a javascript string [duplicate]encodeURIComponent 对 javascript 字符串使用 ISO-8859-1 编码 [重复]
【发布时间】:2013-12-22 23:04:04
【问题描述】:

我一直在努力完成这项工作,但到目前为止还没有运气。 我不太清楚发生了什么,但我会尽可能多地解释。 我的服务器端 jsp 页面都使用我不想更改的 ISO-8859-1 编码。 所有请求/响应均采用 xml 格式。 POST 请求当前使用 javascript escapeURIComponent 函数,一切正常,直到出现特殊字符,例如 string: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”

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    首先,作为一般原则,我强烈建议您放弃对 ISO-8859-1 的忠诚并改用 UTF-8;然而,这并不能解决你眼前的问题,所以让我们把这场战斗留到另一天吧。

    encodeURIComponent 始终使用 UTF-8。这是无法改变的;尽管您可以手动破解encodeURIComponent 产生的编码百分比,但我认为这不会有效地利用任何人的时间。

    根据您的描述,我实际上会将问题放在更远的位置:您的服务器认为该字符串中包含这些字符,因此将必要的代码发送回您的浏览器以显示这些字符。简单地更改您的服务器输出的编码只会导致您的服务器发送 Â 的 UTF-8 代码,而实际上并没有帮助。

    所以问题是:我们如何告诉服务器传入的数据是百分比编码的 UTF-8,而不是服务器显然认为的百分比编码的 8859-1? p>

    您没有在帖子中指定您发送的字符串是作为 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。如果您有任何&lt;form&gt; 元素指向此页面,则应在显示“UTF-8”的表单中添加accept-charset 属性。

    如果您传递的是 URL 本身,那么您需要在您使用的任何 servlet 容器上设置 URIEncoding;如果是 Tomcat,请参阅this question's answer

    【讨论】:

    • &lt;% request.setCharacterEncoding("UTF-8"); %&gt; 工作。谢谢!!!
    • 你也可以用“escape()”代替“encodeURIComponent()”
    猜你喜欢
    • 2019-12-17
    • 1970-01-01
    • 2010-12-02
    • 2011-05-22
    • 1970-01-01
    • 2018-02-21
    • 2011-01-18
    • 2016-11-26
    • 2014-01-18
    相关资源
    最近更新 更多