假设我在一台字符集为“a”的计算机上,浏览一个字符集为“b”的页面,其中“a”和“b”是完全不同的字符集。具体地,“a”中的空格的字符代码不是“b”中的空格。
如果我在页面上的文本输入中键入空格,页面会将其注册为空格吗?并且,当被发送到服务器处理时,是否会像空格或其他字符一样处理?
答案 0 :(得分:1)
您的浏览器接受一些编码,例如ISO-8859-1(Western Latin-1)和UTF-8(Unicode,适合所有人的代码)。
Web服务器向浏览器发送一个页面。 在HTML源文本之前的标题行中,它通常指定:
Content-Type: text/html; charset=UTF-8
在HTML中,它也可以通过。
当浏览器在编码XXX中呈现页面并且以该编码提交表单时,可能具有特定编码%FC或纲。这是对Web服务器的POST或GET请求。
Web服务器必须将请求视为编码XXX(它不再具有网页)。 这需要有意识的编程,或依赖于默认值。棘手。您不需要解码%FC等。
这是一个非常不稳定的事情。请在别处研究。我可能没有提出所有的警告。 (例如,GET / POST与不同浏览器之间存在差异。)
答案 1 :(得分:1)
忽略您的计算机和服务器所处的字符集“开启”,这无关紧要。重要的是给定HTTP请求/响应的字符集。如果您请求资源并且服务器返回字符集“B”,那么您的浏览器将尝试使用字符集“B”解析响应。无论底层计算机的当前语言设置如何,大多数浏览器都能够解析许多不同的字符集。如果您的浏览器不知道所提供的字符集(这是一种罕见的情况,我的IE有34个字符集,而我的Firefox有74个)那么那就是specifically undefined。它可能会猜到或者它可能会引发错误,由浏览器决定。
许多(或可能是大多数)字符集部分基于ASCII
,因此以相同的方式映射前127个字符。即使是双字节ISO/IEC 2022
也可以。所有HTML标记都基于ASCII
集,因此对于这些情况,浏览器可能会猜测编码(有些可能会假设为ISO-8859-1
),因此他们应该能够至少渲染文档的结构。但是,某些编码(例如EBCDIC
的各种风格)未映射到ASCII
。在某些版本中,EBCDIC
<
符号映射到ASCII L
符号,因此HTML呈现将完全失败,并且将显示原始字节(可能解析为ISO-8859-1)
因此,如果您的浏览器遇到SHIFT_JIS
文档但不知道如何解析字节,则可能会尝试使用ISO-8859-1
对其进行解析。因为SHIFT_JIS
中的前127个字符映射与ISO-8859-1
中的相同(大多数情况下),所有HTML都应该渲染得很好。但是,该文本可能会使用浏览器的“未知”字符,该字符有时是问号或某种形式的盒装字符。如果此文档中有一个表单并且您开始键入它,键盘上的键将映射到浏览器猜测的内容,这可能再次ISO-8859-1
。当你点击提交时,这些字符将被编码为“猜测”字符集并被发送到服务器。