在jsp中显示\ u0096

MrB*_*ide 3 unicode jsp character-encoding

我正在尝试显示存储在数据库中的字符,即unicode字符\ u0096.由于一个奇怪的Windows-vs-web-browser事物,这是unicode标准中的控制字符,但是网页将它显示为En Dash.请参阅@ AlanMoore的回答有些UTF-8字符未显示在浏览器上.

我有以下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}"/>
Run Code Online (Sandbox Code Playgroud)

我得到的输出是

Match? 0096:  2013: –
Run Code Online (Sandbox Code Playgroud)

我想要的是

Match? 0096: – 2013: –
Run Code Online (Sandbox Code Playgroud)

Juk*_*ela 6

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

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