我有一个使用HighCharts图表的系统,似乎在显示一些UTF字符时遇到了问题,在IE中显示很好,但是Chrome和火狐没有正确显示字符。
在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 / #237;odo
我们需要HtmlEncode文本以防止任何额外的HTML出于安全原因被运行,我已经研究过使用RegEx来删除任何HTML标记,而不是HTML编码,但是它并不像我们想要的那样工作。
我只是搞不懂为什么它在IE中工作得很好,而在Chrome和Firefox中却不行。
发布于 2013-11-18 22:50:01
事实上,我有一个相关的问题,在这里偶然发现了你的问题。原因是IE正确地解释了HTML编码的数据,因为HighCharts使用HTML在IE中呈现图表。在FireFox和Chrome中,它使用SVG呈现它,所以HTML编码的数据不会被解释为.例如,我有一个问题,我的数据标签中包含一个符号('&')。如果我HTMLEncode我的标签,字符串中的'&‘被编码为&,IE完美地呈现它。Chrome/FF不..。字面上的渲染'&‘。如果我删除HTML编码,Chrome/FF会显示'&‘,但是IE不会在将'&’解释为HTML编码字符的开始时挂起标签。
很抱歉,这本身并不是一个答案,但是想要在某个地方把这个记录下来!
发布于 2013-11-18 23:04:41
在第三章的RFC 4627中,它说:
"JSON文本将用Unicode编码。默认编码为UTF-8。“
==> --这意味着您在使用UTF-8 (在Java中)时不需要对任何东西进行编码。
下面写着:
"JSON可以用UTF-8、UTF-16或UTF-32表示。用UTF-8编写JSON时,JSON兼容8位。用UTF-16或UTF-32编写JSON时,必须使用二进制内容传输编码。“
如果在将高级图表的数据从服务器传输到客户端时遇到特殊字符问题,请尝试检查您的http标头。应该是这样的:
content-type: application/json; charset=utf-8否则,请确保用于配置高级图表的JS文件保存为UTF-8。
如果您仍然认为需要对字符进行编码,那么应用RFC的第2.5章:
如果字符位于基本的多语言平面(从U+0000到U+FFFF),那么它可以表示为六个字符序列:反向solidus,后面跟着小写字母u,后面跟着四个十六进制数字,编码字符的代码点。十六进制字母A虽然F可以大写或小写。因此,例如,只包含一个反向solidus字符的字符串可以表示为“\u005C”。
http://www.ietf.org/rfc/rfc4627.txt
判断RFC,这是完美的JSON:
sb.AppendFormat("text: 'Planificación Mes Período'");https://stackoverflow.com/questions/16590902
复制相似问题