根据ECMA-262第5版:
本国际标准的符合实施应 解释符合Unicode标准版本的字符 3.0或更高版本以及ISO / IEC 1064 6-1,采用UCS-2或UTF-16作为采用的编码形式,实现级别3.如果采用ISO / IEC 10646-1子集没有另外指定,它被假定为 BMP子集,集合300.如果采用的编码形式不是 如果另有规定,则推定为UTF-16编码格式。
这让我想到以下问题:
我对用于存储 cookie的字符编码浏览器特别感兴趣,因为这可以让我计算每个cookie可以使用的实际字节数。
答案 0 :(得分:1)
1. ECMAScript标准推荐的UTF-16或UCS-2是指用于存储或计算目的的编码形式?
计算,与ECMAScript一样,只指定呈现给脚本的界面,而不是如何在幕后实现。一个实现可以使用任何形式的字符串存储(例如,它可以设想优化仅ASCII字符串,每个ECMAScript char / UTF-16代码单元只占一个字节)。
2.什么字符编码(用于存储目的)用于在客户端上存储cookie?
ECMAScript或任何其他网络标准未指定。 IE将cookie文件存储在特定于语言环境的默认代码页(即ANSI)中。其他一些浏览器使用SQLite数据库,通常使用UTF-8。
3.另外,由于HTTP标头值不允许非US-ASCII字符,浏览器是否会在将cookie发送到服务器之前将字符编码更改为ASCII?
各种浏览器各不相同。上次我检查:IE编码为ANSI。 Chrome使用UTF-8。 Firefox使用每个UTF-16代码单元的低字节(与支持的字符兼容的ISO-8859-1,否则无法挽救)。 Safari完全阻止非ASCII。
Upshot:实际上,非ASCII字符在cookie中根本不可用。如果您需要Unicode安全性和/或更大容量,请使用DOM Storage。
我对用于存储Cookie的字符编码浏览器特别感兴趣,因为这样可以让我计算出每个Cookie可以使用的实际字节数。
浏览器在任何情况下限制vary widely。