£ 符号显示为中间有问号的菱形

Ste*_*ake -1 jsp spring-mvc utf-8 character-encoding spring-roo

我正在创建一个网络应用程序,其中涉及向用户显示财务数据。来自英国,使用 GBP \xc2\xa3 作为货币,这个字符被大量使用。

\n\n

然而,时不时地,\xc2\xa3 显示为中间有问号的菱形,并且在网页上它抛出一个无效字符 UTF-8 byte 1 of 1 byte string。

\n\n

有没有一种 UTF 安全的方式来显示标志\xc2\xa3?这是我目前正在做的一个例子:

\n\n
 "Rent Per Annum: \xc2\xa3" + \'${tenant.currentRent}\'\n
Run Code Online (Sandbox Code Playgroud)\n

Bal*_*usC 5

该特定问题至少可能有以下一个或多个原因:

  1. JSP 文件不是由编辑器(Eclipse、Netbeans、记事本等)使用 UTF-8 编码保存的。

  2. 在通过网络发送 JSP 生成的字符之前,服务器没有使用 UTF-8 将其解码为字节流。

  3. 浏览器没有使用 UTF-8 将来自网络的字节流编码为字符。

这些问题可以通过以下方式解决:

  1. 配置编辑器以使用 UTF-8 保存 JSP 文件。我不熟悉 STS,但我知道它是基于 Eclipse 的,因此它可能与标准 Eclipse 中的相同。转到“窗口”>“首选项”>“常规”>“工作区”>“文本文件编码”,然后在下拉列表中选择正确的编码。

    在此输入图像描述

    另一种方法是使用 HTML 实体£(如其他回答者所建议的),这样 JSP 文件的保存编码就不再相关了。字符串中涉及的所有字符£都已受基本 ASCII 编码的支持(世界上使用的每一种像样的字符编码基本上都“扩展”了 ASCII,因此它始终有效)并且 HTML 解释器(网络浏览器)会将 HTML 实体转换为正确的角色。

  2. 必须指示服务器使用 UTF-8 来解码 JSP 输出。这可以在每个 JSP 的基础上通过以下方式完成

    <%@page pageEncoding="UTF-8" %>
    
    Run Code Online (Sandbox Code Playgroud)

    或在应用程序范围内通过

    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <page-encoding>UTF-8</page-encoding>
        </jsp-property-group>
    </jsp-config>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 必须指示浏览器使用 UTF-8 对 HTTP 响应进行编码。这可以通过将charsetHTTP 响应Content-Type标头的属性设置为 UTF-8 来解决,导致 #2 的解决方案已经隐式完成了该操作。

也可以看看: