Javascript 为什么这个字符编码问题只发生在选定的系统上?

Javascript 为什么这个字符编码问题只发生在选定的系统上?,javascript,spring,tomcat,character-encoding,ckeditor,Javascript,Spring,Tomcat,Character Encoding,Ckeditor,我们正在使用一个名为CKEditor的JavaScript所见即所得文本编辑器。编辑器有一个源代码视图,用HTML标记用户在文本编辑器中输入的内容。有时编辑器会将不间断的空格()插入到这个源代码视图中,这很好 在开发人员的机器上,一切似乎都正常工作,因此我们将其部署到生产服务器上。此时,我们开始看到文本中插入了一个奇怪的字符(Â;)。经过一番阅读,我看到在CKEditor bug跟踪页面上的一些记录中报告了这一点。通过将ckeditor.js的script标记上的charset属性设置

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

在开发人员的机器上,一切似乎都正常工作,因此我们将其部署到生产服务器上。此时,我们开始看到文本中插入了一个奇怪的字符(
Â;
)。经过一番阅读,我看到在CKEditor bug跟踪页面上的一些记录中报告了这一点。通过将ckeditor.js的
script
标记上的
charset
属性设置为
UTF-8
,我能够解决这个问题

我的问题是:为什么
脚本
标记首先需要
字符集
属性集,为什么只在某些系统上


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

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

还要确保您有,因为它们不会自动从页面继承


EDIT详细说明了在使用Tomcat以及servlet所需代码时如何设置字符集。

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

还要确保您有,因为它们不会自动从页面继承


EDIT详细说明了在使用Tomcat和servlet所需的代码时如何设置字符集。

FILE.encoding
应该是
FILE.encoding
;系统属性区分大小写@抱歉,这是服务器上的小写字母,我只是打错了。现在修好了,谢谢
FILE.encoding
应该是
FILE.encoding
;系统属性区分大小写@抱歉,这是服务器上的小写字母,我只是打错了。现在修好了,谢谢!因此,我检查了页面GET请求上的
content-type
属性,它是
text/html;字符集=ISO-8859-1
。在这之后,我看不出还有什么会起作用,因为在JavaScript编辑器库中,一切都是客户端的。可能我错了。您的Servlet代码中可能缺少
响应。setCharacterEncoding(“UTF-8”)
。有关详细信息,请参见我的编辑。很好,在我的Spring控制器中这样做将
内容类型更改为
UTF-8
,而不是
ISO-8859-1
。然而,对我来说真正的谜团是,为什么这个编码问题不会出现在我们的Windows开发机器或Linux测试服务器上,而会出现在Linux生产服务器上。我想这肯定是配置上的差异,但是
Dfile。编码
是我唯一能想到的检查方法。在生产服务器和浏览器之间可能有一个代理,如果没有,它会插入一个编码头。因此,我检查了页面GET请求上的
内容类型
属性,它是
text/html;字符集=ISO-8859-1
。在这之后,我看不出还有什么会起作用,因为在JavaScript编辑器库中,一切都是客户端的。可能我错了。您的Servlet代码中可能缺少
响应。setCharacterEncoding(“UTF-8”)
。有关详细信息,请参见我的编辑。很好,在我的Spring控制器中这样做将
内容类型更改为
UTF-8
,而不是
ISO-8859-1
。然而,对我来说真正的谜团是,为什么这个编码问题不会出现在我们的Windows开发机器或Linux测试服务器上,而会出现在Linux生产服务器上。我想这肯定是配置上的差异,但我想检查的只是编码。在生产服务器和浏览器之间可能有一个代理,如果没有,它会插入编码头。