我们正在使用名为CKEditor的JavaScript WYSIWYG文本编辑器。编辑器有一个源视图,用HTML标记用户在文本编辑器中输入的内容。有时编辑器会将不间断的空格(
)插入到此源视图中,这很好。
一切似乎都在开发机器上正常工作,因此我们部署到了生产服务器。此时我们开始看到一个奇怪的字符(Â
)被插入到文本中。经过一些阅读后,我看到这是在CKEditor错误跟踪页面的几张票据中报告的。我可以通过将ckeditor.js的charset
标记上的script
属性设置为UTF-8
来解决此问题。
我的问题是:为什么script
标记首先需要设置charset
属性,为什么只在某些系统上?
this SO question的最后一条评论提到UTF-8中非破坏空间的字节序列实际上是latin1
中的非破坏空格的字符序列(即ISO- 8859-1对吗?)。这肯定是一个线索,因为每次用户切换到源视图时,一个接一个地插入另一个字符。就好像CKEditor框架试图注入一个不间断的空间,但它会变成 
,然后变成 
,依此类推。所有系统上的content-type
(从Chrome调试器查看)都是text/html;charset=ISO-8859-1
,我不确定原因。所有Tomcat配置中的Dfile.encoding选项都设置为utf-8
。 meta
标记也是<meta charset="utf-8">
。
答案 0 :(得分:1)
在Web浏览器中启动开发工具。表单呈现/提交时,请停止并查看来回发送的请求和响应标头。确保您到处都看到UTF-8
。如果它丢失了,那么一方将采用“默认编码” - 无论可能是什么。
另外请确保您拥有set the charset on the forms,因为它们不会自动从页面继承该内容。
编辑 This page详细说明了如何在使用Tomcat以及servlet的必要代码时设置charset。