我试图显示存储在数据库中的字符,它是Unicode字符\u0096。由于Windows-VS-Web-Browser的问题,这是Unicode标准中的控制字符,但是网页会将其显示为EnDash。有关某些UTF-8字符未显示在浏览器上的信息,请参见@AlanMoore的答案。
我有以下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: –
用表示的字符\0096U + 0096无疑是Unicode中的控制字符,具有未定义的含义。这不应与以下事实混淆:在Windows-1252编码中,字节 0x96表示U + 2013 EN DASH。
\0096
因此,与其尝试将不可见的字符呈现为可见,不如 将 U + 0096 替换 为U + 2013,或者根据实际设置,也许 转换 从数据库中获得的数据,将Windows-1252转换为UTF -16。该数据库不太可能包含U + 0096。相反,它包含的字节现在被误解为UTF-16,但实际上是Windows-1252编码的字符表示。