【问题标题】:Questions on Chinese Encoding中文编码问题
【发布时间】:2012-04-23 09:59:22
【问题描述】:

我正在尝试创建一个中文网页,我意识到虽然在浏览器上运行它时文本看起来不错,但一旦我更改了字符编码,文本就会变得乱码。以下是正在发生的事情:

  1. 我在 Emacs 中创建了我的 html 文件,以 UTF-8 编码。
  2. 我将它上传到服务器,然后在我的浏览器(FF、IE、Chrome、Opera)上查看 - 没问题。
  3. 我尝试通过 FF > 查看 > 字符编码 > 所有那些不同的中文编码系统以其他编码查看页面,例如简体中文 (HZ)
  4. 除了 UTF-8,在其他所有编码中,文本都会变得乱码。

我假设这不是问题 - 即浏览器足够聪明,可以知道页面采用哪种编码,并准确解析内容。我想知道的是,为什么我更改编码后就无法再阅读中文文本了——是因为我的操作系统上没有安装中文字体吗?如果我的受众是中国人,我应该坚持使用 UTF-8,还是应该从他们的众多编码系统中选择一种?

提前感谢您的帮助/意见。

【问题讨论】:

    标签: browser encoding utf-8 cjk


    【解决方案1】:

    UTF 不是“包罗万象”的编码。它旨在包含国际语言字符符号以便于使用,但它仍然是一种编码,就像您选择的其他编码一样。您必须在每种编码中重新键入文本,以使其在使用该编码查看时正确显示。

    【讨论】:

    • 重新输入文本?你是说我应该创建单独的文件,每个文件都用不同的编码编写和保存?那我该如何决定提供哪个文件呢?
    • 是的 - 但您应该遵循 Agent_L 的建议并在 HTML 中定义字符集编码,这样可以节省更多时间。如果您想要单独的文件,应该可以编写一个脚本来自动将 UTF-8 编码为需要支持的所有其他编码,但考虑一下,拥有相同内容的多个副本可能会成为维护麻烦。
    • 我相信他的意思是客户端请求文件并以其他编码明确要求它的情况。虽然可能,但现代浏览器不太可能不支持 utf-8(据我的欧盟/美国偏见知识)。
    • 感谢大家的贡献。我现在可以说使用一种编码而不是多种编码(比如在 UTF-8 中)并在 html 和服务器端明确定义编码可能是一个更好的主意吗?因为我访问过许多大型中文网站(例如雅虎中国),如果您将编码更改为它不支持的内容,内容就会变得乱码。我假设以多种编码方式维护内容的麻烦是不值得的。
    • 是的,维护一个文件几乎总是比多个文件简单。
    【解决方案2】:
    【解决方案3】:

    当然,更改浏览器中的编码会“破坏”文本!浏览器正在获取 UTF-8 代码点流,并尝试对原始数据强制执行另一种编码。不用说,结果并不漂亮。在浏览器中更改编码并不等同于转换。

    正如您所猜测的那样,现代浏览器通常会正确猜测 - 但并非总是如此。作为 Agent_L,请务必在标头中声明编码。

    【讨论】: