gpt4 book ai didi

utf-8 - Web 项目中应该使用什么编码方案?

转载 作者:行者123 更新时间:2023-12-04 06:49:00 25 4
gpt4 key购买 nike

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

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

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

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

  • XHTML 文件可以使用 <?xml version='1.0' encoding='UTF-8' ?> 详细设置编码声明。
  • CSS 文件可以通过 @CHARSET "UTF-8"; 设置此项.
  • JavaScript 文件没有文件内声明,但可以全局定义 <meta http-equiv="Content-Script-Type" content="text/javascript; charset=utf-8"><script type="text/javascript" charset="utf-8">对于特定的脚本。

  • 如果我们在没有 @CHARSET "UTF-8"; 的情况下离开 CSS 文件会怎样宣言?浏览器如何决定它的编码方式?

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

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

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

    对于二进制文件......好吧,编码方案并不重要(我想有人可以说它甚至不存在)。

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

    最佳答案

    My initial thought was to convert to UTF-8, because "it supports all the character sets". However, is this really wise?


    去吧。你想要统治世界。

    1) How do web browser interpret the files by default? Does it depend on what language version one is using?


    它使用 Content-Type 对此的响应 header (注意, 真正的 响应 header ,而不是 HTML 元标记)。我知道/知道您是一名 Java 开发人员,所以这里是针对 JSP/Servlet 的答案:设置 <%@page pageEncoding="UTF-8" %>在 JSP 页面顶部将隐式执行此操作并设置 response.setCharacterEncoding("UTF-8")在 Servlet/Filter 中做同样的事情。如果此 header 不存在,则完全由浏览器决定/确定编码。 MSIE 将使用平台默认编码。 Firefox 更聪明一点,它会根据页面内容猜测编码。

    2) Is it wise to use UTF-8, because it is so flexible. By locking our code into Cp1252 (or maybe ISO-8859-1) I can ensure that foreign developers don't introduce special characters into files.


    我只会写一份描述团队编码约定的文档,然后在开发人员之间传播。每个自尊的开发人员都知道,如果不遵守这一点,他/她就有被解雇的风险。

    3) For internatioanlization, I initially considered UTF-8 a good thing ("how can you add translations if the file encoding doesn't support the characters one needs?"). However, as it turned out, Java Resource Bundles (.properties files) must be encoded with ISO-8859-1, because otherwise they might break.


    从 Java 1.6 开始,使用新的 Properties#load() 解决了这个问题方法采用 Reader和新 ResourceBundle.Control 类,您可以在其中控制包文件的加载。在 JSP/Servlet 术语中,通常是 ResourceBundle被使用。只需将消息包名称设置为自定义的全限定类名 ResourceBundle实现,它将被使用。

    For binary files... well, the encoding scheme doesn't really matter (I suppose one can say it doesn't even exist).


    编码确实只在人们想要将计算机可读的二进制数据转换为人类可读的字符数据时才有趣。对于“真正的”二进制内容,它确实没有任何意义,因为二进制格式不代表任何合理的字符数据。
    也可以看看:
  • Unicode - How to get characters right? (Java webapp 开发目标)
  • I18n enhancements in Java 6
  • Another answer with ResourceBundle.Control example
  • 关于utf-8 - Web 项目中应该使用什么编码方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3607459/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com