1

我有一个使用 HighCharts 图表的系统,似乎在显示一些 UTF 字符时出现问题,在 IE 中显示很好,但 Chrome 和 Firefox 不能正确显示字符。

在 VB 代码中,我们正在构建一个 javascript 函数来标记条形图。

sb.AppendLine("   xAxis: {")
sb.AppendLine("       title: {")
sb.AppendFormat(" text: '{0}'", JSEncode(Server.HtmlEncode("Planificación Mes Período")))
sb.AppendLine("       },")

在 IE 中,它正确显示为 Planificación Mes Período

但在 chrome 和 firefox 中,它显示如下,在 # 之前带有 &

Planificaci #243;n Mes Per #237;odo

出于安全原因,我们需要对文本进行 HtmlEncode 以防止运行任何附加的 HTML,我已经研究过使用 RegEx 来删除任何 HTML 标签而不是 HTML 编码,但它没有按我们想要的方式工作。

我只是很困惑为什么它在 IE 中可以正常工作,但在 Chrome 和 Firefox 中却不行。

4

2 回答 2

0

实际上,我有一个相关的问题,在这里偶然发现了你的问题。原因是 IE 正确解释了 HTML 编码的数据,因为 HighCharts 使用 HTML 在 IE 中呈现图表。在 FireFox 和 Chrome 中,它使用 SVG 呈现它,因此 HTML 编码的数据不会被解释为 HTML ......例如,我有一个问题,我的一个数据标签包含一个 & 符号 ('&')。如果我对标签进行 HTMLEncode,则字符串中的“&”会被编码为 &,IE 会完美地呈现它。Chrome/FF 不...字面呈现'&'。如果我删除 HTML 编码,Chrome/FF 会显示“&”,但 IE 不会呈现标签,因为它无法将“&”解释为 HTML 编码字符的开头。

抱歉,这本身不是一个答案,但希望将其记录在某个地方!

于 2013-11-18T22:50:01.863 回答
0

在第 3 章的 RFC 4627 中,它说:

" JSON 文本应以 Unicode 编码。默认编码为 UTF-8。 "

==> 这意味着当您使用 UTF-8 时(在您的 Java IDE 中?),您不需要编码任何东西。

再往下说:

" JSON 可以使用 UTF-8、UTF-16 或 UTF-32 表示。当 JSON 以 UTF-8 编写时,JSON 是 8 位兼容的。当 JSON 以 UTF-16 或 UTF-32 编写时,二进制内容-必须使用传输编码。

如果您在将 Highcharts 的数据从服务器传输到客户端时遇到特殊字符问题,请尝试检查您的 http 标头。它应该是这样的:

content-type: application/json; charset=utf-8

否则请确保用于配置 highcharts 的 JS 文件保存为 UTF-8。

如果您仍然觉得必须对字符进行编码,请应用 RFC 的第 2.5 章:

如果字符在基本多语言平面(U+0000 到 U+FFFF),那么它可以表示为六个字符序列:一个反斜线,后跟小写字母 u,后跟四个十六进制数字,编码字符的代码点。十六进制字母 A 到 F 可以是大写或小写。因此,例如,一个只包含一个反斜线字符的字符串可以表示为“\u005C”。

http://www.ietf.org/rfc/rfc4627.txt

判断 RFC 这是完美的 JSON:

sb.AppendFormat("text: 'Planificación Mes Período'");
于 2013-11-18T23:04:41.280 回答