【问题标题】:Display \u0096 in a jsp在jsp中显示\u0096
【发布时间】:2014-06-30 22:58:39
【问题描述】:

我正在尝试显示存储在数据库中的字符,它是 unicode 字符 \u0096。由于奇怪的 windows-vs-web-browser 事情,这是 unicode 标准中的控制字符,但网页会将其显示为 En Dash。请参阅@AlanMoore 在Some UTF-8 characters do not show up on browser 上的回答。

我有以下 jsp 文件。我想将 \u0096 字符显示为 En Dash(其他前端解决方案可以完成的壮举)。

<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@ page session="false" trimDirectiveWhitespaces="true"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!doctype html>
<html>

<c:set var="control" scope="request" value= "b"/>
<c:set var="endash" scope="request" value="a"/>
<% request.setAttribute("control", "\u0096");%>
<% request.setAttribute("endash", "\u2013");%>

Match? 0096: <c:out value="${control}"/> 2013: <c:out value="${endash}"/>

我得到的输出是

Match? 0096:  2013: –

我想要的是

Match? 0096: – 2013: –

【问题讨论】:

    标签: jsp unicode character-encoding


    【解决方案1】:

    \0096 表示的字符,即 U+0096,在 Unicode 中是明确的控制字符,具有未定义的含义。这不应与在 windows-1252 编码中,byte 0x96 表示 U+2013 EN DASH 的事实相混淆。

    因此,您应该简单地将 U+0096 替换为 U+2013,或者根据实际设置转换,而不是尝试将不可见字符呈现为可见> 从数据库中获取的数据,从 windows-1252 转换为例如UTF-16。数据库不太可能包含应为 U+0096 的内容。相反,它包含的字节现在被误解为 UTF-16,但实际上是 windows-1252 编码的字符表示形式。

    【讨论】:

    • @jukkakkorpela 它作为字节存储在java字符串中的事实表明发生了错误的转换?
    • @CynicalOptimist,是的,很可能。
    猜你喜欢
    • 2012-06-22
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多