我有一个使用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ónMesPeríodo
但是在chrome和firefox中它显示如下&在#
之前Planificaci#243; n Mes Per#237; odo
我们需要对文本进行HtmlEncode以防止出于安全原因而运行任何添加HTML,我已经研究过使用RegEx来删除任何HTML标记而不是HTML编码,但它没有按照我们想要的方式工作。
我很困惑为什么它在IE中工作正常但在Chrome和Firefox中没有。
答案 0 :(得分:0)
实际上,我有一个相关的问题,在这里偶然发现了你的问题。原因是IE正确解释了HTML编码数据,因为HighCharts使用HTML在IE中呈现图表。在FireFox和Chrome中,它使用SVG渲染它,因此HTML编码数据不会被解释为HTML ...例如,我有一个问题,其中一个数据标签包含&符号('&')。如果我HTMLEncode我的标签,'&'在字符串中编码为&和IE渲染完美。 Chrome / FF不会......字面上呈现'&'。如果我删除HTML编码,则Chrome / FF会显示'&'但IE并没有呈现标签,因为它解释了'&'。作为HTML编码字符的开头。
对不起,这本身并不是一个答案,但是想把它记录在某个地方!
答案 1 :(得分:0)
在第3章的RFC 4627中,它说:
“ JSON文本应以Unicode编码。默认编码为UTF-8。”
==>这意味着无论如何在使用UTF-8时都不需要编码任何东西(在Java IDE中?)。
进一步向下说:
“ JSON可以使用UTF-8,UTF-16或UTF-32表示。当JSON时 是用UTF-8编写的,JSON是8bit兼容的。当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'");