1

我正在做一个测试,Firefox 是如何编码字符的。

但事实让我很困惑。

HTML 代码:

<html lang="zh_CN">
<head>
<title>some Chinese character</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<img src="http://localhost/xxx" />
</body>

xxx是一些汉字。这些字符必须编码为 %xx 之类的格式才能通过 HTTP 传输。

首先,我将源文件编码为UTF-8。使用firefox打开html文件。img 标签会发送一个请求,“xxx”字符是 UTF8 编码的。

  • 用UTF8编码HTML源文件,charset=utf8,浏览器用UTF编码URL)

我将元数据更改为 <meta http-equiv="Content-Type" content="text/html; charset=gbk"> 但没有任何改变。

  • HTML 源文件用 UTF8 编码,charset=gbk,浏览器用 UTF 编码 URL)

其次,我将源文件保存在 ANSI 中,可能是 GBK 或 GB2312。

当 charset=gbk 时,仍然使用 UTF8 对字符进行编码。

  • 用GBK编码HTML源文件,charset=gbk,浏览器用UTF编码URL)

但是,当 charset=utf8 时,字符由 GBK 编码。顺便说一句,其他汉字不能正确显示,例如标题中的字符串。

  • HTML源文件用GBK编码,charset=utf8,浏览器用GBK编码URL)

如何控制浏览器的编码行为?

4

1 回答 1

2

UTF-8 是URL 编码的标准。如果您在 GBK 中对源文件进行物理编码,但utf-8在 content-type 中使用,您只是在对浏览器撒谎,并且会得到不一致或无效的结果。

当一个新的 URI 方案定义了一个表示由通用字符集 [UCS] 中的字符组成的文本数据的组件时,数据应首先根据 UTF-8 字符编码 [STD63] 编码为八位字节;那么只有那些与未保留集中的字符不对应的八位字节应该进行百分比编码。例如,字符 A 将表示为“A”,字符 LATIN CAPITAL LETTER A WITH GRAVE 将表示为“%C3%80”,字符 KATAKANA LETTER A 将表示为“%E3%82%A2

于 2012-12-22T08:33:03.043 回答