我有一个JSP页面检索数据,当单引号或双引号出现在文本中时,它们显示为此符号.
JSP代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>General</title>
</head>
<body>
<h1> <%= order.getDescription %> </h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
示例:订单的描述应如下所示,
"20 - 4"x 6"小部件"
但我得到了这个,
"20 - 4 x 6小部件"
注意:我无法修改数据库.
[编辑]
我用commons-lang-2.4.jar来逃避角色,这些是给我带来麻烦的主要角色:
我确信某些格式的其他字符会给我带来问题,但是,我只是替换了字符以进行临时修复,我目前正在测试下面的建议.
[解决方案代码]
这可能不是最好的方法,但它完成了工作.从数据库中检索数据后,下面的代码位于支持bean中.
description = StringEscapeUtils.escapeHtml(description);
description = description.replaceAll("‘", """);
description = description.replaceAll("’", """);
description = description.replaceAll("“", """);
description = description.replaceAll("”", """);
description = description.replaceAll("–", "-");
description = StringEscapeUtils.unescapeHtml(description);
Run Code Online (Sandbox Code Playgroud)
这是字符U + 0094,这是一个很大程度上未使用的控制代码.如果使用ISO-8859-1来解码实际位于Windows代码页1252(西欧)中的字节,通常会出现此范围内的字符.它们是相似的编码并且经常彼此混淆,但0x80-0x9F范围内的符号是不同的.Windows cp1252使用其中一些用于智能引号之类的东西,这是你可能期望的:双关闭引用(",U + 201D RIGHT DOUBLE QUOTATION MARK).
大多数网络浏览器在被告知网页是ISO-8859-1时,实际上会使用cp1252而不是渲染报价.所以这可能不是标记方面的问题.
您可能拥有的是包含CP1252的数据库,以及使用ISO-8859-1将字节转换为字符串的数据访问层 - 可能是因为这是服务器的默认编码.理想情况下,您希望将数据库配置为本机存储Unicode字符串,但如果您不能这样做,则需要一种方法来配置数据库连接器以使用CP1252编码而不是ISO-8859-1.你如何做到这一点取决于你与之相关的内容; 您可能必须设置属性,或在连接字符串中包含参数.
如果你不能做到这与您的数据层,约留下的唯一的事情就是手动去了你从数据库中获取的所有字符串值和转码他们回到他们应该是什么,通过编码与ISO-8859-1编码,然后用CP1252解码.这将是一个真正的痛苦,但作为最后的手段将起作用.
[Side-issue:close-double-quote是表示英寸的错误字符."(Unicode U + 2033 DOUBLE PRIME)是最好的,但是如果你只限于遗留编码,那么直接"双引号就可以了."
这些可能是数据库中的非标准字符......也许是定向引号而不是直接的上下引号?
处理此问题的一种直接方法是,由于您无法更改数据库中的数据,因此只需使用替换或正则表达式将“坏”字符替换为可以正确显示的字符。
| 归档时间: |
|
| 查看次数: |
5124 次 |
| 最近记录: |