Utf 8 在web项目中应该使用什么编码方案?

Utf 8 在web项目中应该使用什么编码方案?,utf-8,character-encoding,special-characters,Utf 8,Character Encoding,Special Characters,我们正在用Eclipse构建一个(Java)web项目。默认情况下,Eclipse在Windows机器(我们使用)上使用Cp1252编码 由于我们在中国也有开发人员(除了欧洲),我开始怀疑这是否真的是要使用的编码 我最初的想法是转换成UTF-8,因为“它支持所有字符集”。然而,这真的明智吗?我们应该选择其他编码吗?我看到两个问题: 1) 默认情况下,web浏览器如何解释文件?这是否取决于一个人使用的语言版本?我想说的是,我们应该详细声明使用的编码方案: XHTML文件可以使用声明详细设置编码

我们正在用Eclipse构建一个(Java)web项目。默认情况下,Eclipse在Windows机器(我们使用)上使用
Cp1252
编码

由于我们在中国也有开发人员(除了欧洲),我开始怀疑这是否真的是要使用的编码

我最初的想法是转换成UTF-8,因为“它支持所有字符集”。然而,这真的明智吗?我们应该选择其他编码吗?我看到两个问题:

1) 默认情况下,web浏览器如何解释文件?这是否取决于一个人使用的语言版本?我想说的是,我们应该详细声明使用的编码方案:

  • XHTML文件可以使用
    声明详细设置编码
  • CSS文件可以通过
    @CHARSET“UTF-8”来设置这一点
  • JavaScript文件没有文件内声明,但可以全局定义特定脚本的
如果我们不使用
@CHARSET“UTF-8”而保留CSS文件会怎么样声明?浏览器如何决定其编码方式

2) 使用UTF-8是否明智,因为它非常灵活。通过将我们的代码锁定到
Cp1252
(或者
ISO-8859-1
),我可以确保外国开发人员不会在文件中引入特殊字符。例如,这有效地防止了他们插入中文评论(我们应该使用100%的英文)。此外,允许UTF-8有时可能会让开发人员意外地引入一些奇怪的字符,这些字符很难/不可能用肉眼看到。例如,当人们复制粘贴文本或偶然按下一些奇怪的键盘组合时,就会发生这种情况

似乎在项目中允许UTF-8只会带来问题

3) 对于国际化,我最初认为UTF-8是件好事(“如果文件编码不支持所需的字符,如何添加翻译?”)。然而,事实证明,Java资源包(.properties文件)必须用ISO-8859-1编码,否则它们可能会损坏。相反,将国际字符转换为
\uxxx
符号,例如
\u0009
,并使用
ISO-8859-1
对文件进行编码。所以我们甚至不能使用UTF-8来实现这一点

对于二进制文件。。。嗯,编码方案其实并不重要(我想人们甚至可以说它根本不存在)


我们应该如何处理这些问题?

我绝对推荐UTF-8,而不是所有其他编码方案

如果要在数据库中存储多语言数据,请确保DBMS完全符合UTF-8

此外,请确保所有文件(包括css、javascript和应用程序模板文件)本身都是使用BOM以UTF-8编码的。否则,浏览器可能无法正确解释
字符集
指令

在一个大型数据库支持的CMS系统中,我们有30多种语言,它的工作非常出色。客户机具有用于执行数据输入的所有语言的人工编辑器

您可能会遇到一些语言的排序问题(在不区分大小写的数据库中出现可怕的Turkish dotless
i
-ı示例)。这个问题总是有答案的,但它将是非常特定于数据库的

我不熟悉Java资源包的细节。我们确实使用了一些Java库,比如
markdownj
,它们可以毫无问题地处理数据库中的UTF-8编码文本


编辑以回答OP的评论:

我认为将UTF-8纳入主流的主要原因是,你永远不知道你的系统将朝着什么方向发展。您可能会假设您现在只处理一种语言,但即使在完全单语的环境中也不是这样,因为您可能需要存储名称或包含非US-ASCII八位字节值的引用

此外,UTF-8编码字符流不会改变US-ASCII八位字节值,这提供了与未启用UTF-8的文件系统或其他软件的完全兼容性

如果应用程序/文本文件是用UTF-8编码的,并且在提供给浏览器的任何页面上包含
,那么今天的现代浏览器都将正确解释UTF-8

请检查您的中间件(php、jsp等)是否在任何地方支持UTF-8,并与数据库结合使用

我看不出开发人员处理他们不理解的数据的潜在问题是什么。当我们用自己的母语处理数据时,这难道不是潜在的情况吗?至少有了一个完全unicode的系统,他们将能够识别他们在浏览器或数据库中看到的字形是否与他们应该处理的语言相匹配,而不是获得流的字符

我相信使用UTF-8作为所有字符编码都是安全的。这应该适用于几乎所有的情况,并且你已经做好了准备,迎接你的老板到来并坚持你必须使用多种语言的那一天

我最初的想法是转换成UTF-8,因为“它支持所有字符集”。然而,这真的明智吗

去做吧。你想要统治世界

1) 默认情况下,web浏览器如何解释文件?这是否取决于一个人使用的语言版本

它使用响应头(注意,real响应头,而不是HTML元标记)。我知道你是一名Java开发人员,下面是针对JSP/Servlet的答案:在JSP页面顶部设置
将隐式地正确执行此操作,而在Servlet/Filter中设置
response.setCharacterEncoding(“UTF-8”)
也会这样做。如果没有此标题,则完全由浏览器决定/确定编码。MSIE将直接使用平台默认编码。Firefox更聪明一点,会猜出