我们正在使用一个名为 CKEditor 的 JavaScript WYSIWYG 文本编辑器。编辑器有一个源视图,用 HTML 标记用户在文本编辑器中输入的内容。有时编辑器会在此源视图中插入不间断空格 (
),这很好。
一切似乎都在开发机器上正常工作,所以我们部署到我们的生产服务器上。此时,我们开始看到一个奇怪的 Â 字符 ( Â
) 被插入到文本中。经过一番阅读,我看到 CKEditor 错误跟踪页面上的几张票报告了这一点。我能够通过将ckeditor.js 标记charset
上的属性设置为.script
UTF-8
我的问题是:为什么script
标签charset
首先需要设置属性,为什么只在某些系统上?
关于这个 SO 问题的最后一条评论提到 UTF-8 中不间断空格的字节序列实际上是 Â 字符后跟不间断空格latin1
(这是 ISO-8859-1 对吗?)。这肯定是一个线索,因为每次用户切换到源视图时,都会一个接一个地插入另一个字符。就好像 CKEditor 框架试图注入一个不间断的空间,但它变成了 
, then  
, 等等。在content-type
所有系统上(从 Chrome 调试器查看)是text/html;charset=ISO-8859-1
,我不确定为什么。所有 Tomcat 配置中的 Dfile.encoding 选项都设置为utf-8
. 标签meta
也是.<meta charset="utf-8">