0

我正在从服务器的cookies中保存一个Array Json,如下所示:

HttpCookie myCookie = Request.Cookies["ProcessArray"];

myCookie.Value = JSONC.Serialize(lstProcess);

在 Chrome 中我得到了这个(使用 javascript):

文档.cookie

"ProcessArray=[{"ProcessID":1,"Description":"Adquisición de Articulos","Path":"internalprocess.aspx?process=1"}]"

但在 IE (8,9,10) 中,我得到了这个:

文档.cookie

"ProcessArray=[{"ProcessID":1,"Description":"Adquisición de Articulos","Path":"internalprocess.aspx?process=1"}]"

我能做些什么?

4

1 回答 1

2

ó是 UTF-8 编码的版本ó

我的猜测是您的 JSON 序列化程序正在转换为 UTF-8。也许可以改为输出 ISO-8859-1?(请参阅UTF-8 和 ISO-8859-1 有什么区别?

如果您通过Set-CookieHTTP 标头设置 cookie(与 JavaScript 相比),IE 可能会处理这与 Chrome 不同。(请参阅HTTP 标头应该使用什么字符编码?

更新: EricLaw 关于使用 US-ASCII 的评论是正确的。我认为RFC 2047是最好的参考,它为 US-ASCII 以外的字符集引入了“编码字”。

然而,在这个特定的例子中,这个 cookie 值是 JSON,而不是使用编码字或 %XX URL 编码,所以我将使用 JavaScript 字符串转义序列(请参阅特殊字符 (JavaScript)将 Unicode 字符串转换为转义的 ascii 字符串)。 ó是字符 0xF3,因此'\u00F3'请在 JSON 格式的 cookie 值中使用该字符串。这允许任何客户端 cookie 读取,仅 JSON.parse() 值。

文档.cookie

"ProcessArray=[{"ProcessID":1,"Description":"Adquisici\u00F3n de Articulos","Path":"internalprocess.aspx?process=1"}]"

于 2013-05-17T23:18:28.460 回答