我试图显示存储在数据库中的字符,它是Unicode字符\ u0096。由于Windows-VS-Web浏览器的异常,这是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: –

最佳答案

\0096表示的字符,即U + 0096,无疑是Unicode中的控制字符,具有未定义的含义。这不应与以下事实混淆:在Windows-1252编码中,字节0x96表示U + 2013 EN DASH。

因此,除了尝试将U + 0096替换为U + 2013之外,或者尝试根据实际设置将U + 0096替换为U + 0096,而不是尝试将不可见的字符呈现为可见状态,也可以将从数据库中获取的数据转换为Windows-1252到例如UTF-16。该数据库不太可能包含U + 0096。而是,它包含的字节现在被误解为UTF-16,但实际上是Windows-1252编码的字符表示。

09-19 18:26