2013-05-16 122 views
1

我有一个使用HighCharts图表的系统,似乎在显示某些UTF字符时出现问题,IE中的显示效果不错,但Chrome和Firefox不能正确显示字符。HighCharts Axis标签编码

在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的MesPeríodo

但在铬和Firefox它显示#

Planificaci#243之前,如下面&; N的Mes每#237 ; odo

我们需要HtmlEncode的文本,以防止任何额外的HTML运行由于安全原因,我研究过使用RegEx删除任何HTML标签而不是HTML编码,但它没有像我们想要的那样工作。

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

+0

你有没有在你的站点设置字符集为UTF-8?简单的例子工作正常:http://jsfiddle.net/3bQne/101/ –

+0

我们已经改变它不HtmlEncode的文字。 斜体和粗体标签适用于文本,但链接和按钮不会出现,这对我们来说安全性更好。 – user2390470

+0

你不需要HtmlEncode JSON。你也不需要转义序列。只需使用原始的UTF-8字符就可以看到它!您唯一需要做的就是将内容声明为UTF-8。 – mwhs

回答

0

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

对不起,这不是一个答案本身,但希望有记录的地方!

0

在RFC 4627第3章,它说:

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 transfering数据到客户端,然后尝试检查你的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'");