为什么此字符编码问题仅发生在选定系统上?

时间:2013-10-17 14:48:52

标签: javascript spring tomcat character-encoding ckeditor

我们正在使用名为CKEditor的JavaScript WYSIWYG文本编辑器。编辑器有一个源视图,用HTML标记用户在文本编辑器中输入的内容。有时编辑器会将不间断的空格( )插入到此源视图中,这很好。

一切似乎都在开发机器上正常工作,因此我们部署到了生产服务器。此时我们开始看到一个奇怪的字符(Â)被插入到文本中。经过一些阅读后,我看到这是在CKEditor错误跟踪页面的几张票据中报告的。我可以通过将ckeditor.js的charset标记上的script属性设置为UTF-8来解决此问题。

我的问题是:为什么script标记首先需要设置charset属性,为什么只在某些系统上?

this SO question的最后一条评论提到UTF-8中非破坏空间的字节序列实际上是latin1中的非破坏空格的字符序列(即ISO- 8859-1对吗?)。这肯定是一个线索,因为每次用户切换到源视图时,一个接一个地插入另一个字符。就好像CKEditor框架试图注入一个不间断的空间,但它会变成Â&nbsp,然后变成ÂÂ&nbsp,依此类推。所有系统上的content-type(从Chrome调试器查看)都是text/html;charset=ISO-8859-1,我不确定原因。所有Tomcat配置中的Dfile.encoding选项都设置为utf-8meta标记也是<meta charset="utf-8">

1 个答案:

答案 0 :(得分:1)

在Web浏览器中启动开发工具。表单呈现/提交时,请停止并查看来回发送的请求和响应标头。确保您到处都看到UTF-8。如果它丢失了,那么一方将采用“默认编码” - 无论可能是什么。

另外请确保您拥有set the charset on the forms,因为它们不会自动从页面继承该内容。

编辑 This page详细说明了如何在使用Tomcat以及servlet的必要代码时设置charset。