在没有charset参数的情况下,可以在content中指定字符编码。以下是几种内容类型采用的一些方法:
HTML - 通过元标记:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
HTML5变体:
<meta charset="utf-8">
XML (XHTML, KML) - 通过XML 声明:
<?xml version="1.0" encoding="UTF-8"?>
文本- 通过字节顺序标记。例如,对于UTF-8,十六进制文件的前三个字节:
EF BB BF
与与文档关联的字符集不同,还要注意非 ASCII 字符可以使用各种方法通过 ASCII 字符序列进行编码:
HTML - 通过字符引用:
&#nnnn;
&#xhhhh;
XML - 通过字符引用:
&
&defined-entity;
JSON - 通过转义机制:
\u005C
\uD834\uDD1E
现在,关于 HTTP 1.1 协议,RFC 2616 对 charset 这么说:
“charset”参数与某些媒体类型一起使用来定义数据的字符集(第 3.4 节)。当发送者没有提供明确的字符集参数时,“文本”类型的媒体子类型被定义为在通过 HTTP 接收时具有“ISO-8859-1”的默认字符集值。除“ISO-8859-1”或其子集以外的字符集中的数据必须用适当的字符集值标记。有关兼容性问题,请参阅第 3.4.1 节。
因此,我对上述内容的解释是,除了“文本”类型的媒体子类型之外,不能假设默认字符集。当然,我们生活在现实世界中,实施者并不总是遵守规则。如已接受的答案中所述,各种网络浏览器供应商已经实施了自己的策略来确定未明确指定的文档字符集。可以假设其他客户端(例如,Google 地球)的供应商也实施了他们自己的策略。