HTTP标准或其他标准是否定义了在使用%XX编码之前应该使用哪种编码处理特殊字符?如果没有定义,是否有一种方法来定义使用的编码方式?似乎大多数浏览器会使用UTF-8发送数据。
适当允许非ASCII字符的链接标准是IRI。 IRI通过UTF-8-%编码大多数URL来转换为URI,但主机名使用Punycode进行转换。为了兼容性,最好不要依赖浏览器理解链接中的IRIs。相反,自己对路径和参数字符进行UTF-8然后%编码。在现代浏览器的地址栏中,它们仍将显示为正确的字符;不幸的是,根据语言设置,IE不会在所有情况下显示已解码字符的IRI形式。
希腊伽玛字符的Wiki IRI为:
http://en.wikipedia.org/wiki/Γ
编码为URI后,它是:
http://en.wikipedia.org/wiki/%CE%93
CHAR = <any US-ASCII character (octets 0 - 127)>
并且
token = 1*<any CHAR except CTLs or separators>
separators = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "{" | "}" | SP | HT
Accept-Charset
只影响返回页面的编码,而不影响请求本身。我所指的是 GET 查询中的每个字符,而不仅仅是主机名或其他部分。 - Matthew Scharley
accept-charset
控制,并在多部分表单数据子标头中与服务器通信,但实际上IE会危险地错误地获取accept-charset
,而且没有浏览器发送表单数据子标头,因此我们被困在依赖表单编码的情况下。哦,好吧,总有一天每个人都会使用UTF-8,一切都会正常工作。一个世纪... - bobince