2013-05-17 24 views
0

,我在餅乾從服務器像這樣保存數組JSON:在IE瀏覽器的cookie特殊字符

的HttpCookie的myCookie = Request.Cookies時[ 「ProcessArray」];

myCookie.Value = JSONC.Serialize(lstProcess);

和在鉻我得到這個(與JavaScript):

的document.cookie

「ProcessArray = [{」 的ProcessID 「:1,」 描述 「:」 Adquisición德Articulos 「 」路徑「: 」internalprocess.aspx過程= 1「}]」

,但在IE(8,9,10),我得到這個:

的document.cookie

「ProcessArray = [{」 的ProcessID 「:1,」 描述 「:」 Adquisición德 Articulos 「 」路徑「: 」internalprocess.aspx過程= 1「}]」

我該怎麼辦?

回答

2

óó

我的猜測是你的JSON序列被轉換爲UTF-8 UTF-8編碼的版本。也許可以輸出ISO-8859-1呢? (請參閱What is the difference between UTF-8 and ISO-8859-1?

如果您通過Set-Cookie HTTP標頭(與JavaScript中的對比)設置Cookie,則IE可能會處理與Chrome不同的問題。 (見HTTP header should use what character encoding?

更新: EricLaw的評論是正確的關於使用US-ASCII。我認爲RFC 2047是最好的參考資料,它爲US-ASCII以外的字符集引入了「編碼字」。

但是,在此特定示例中,此cookie值不是使用編碼字或%XX URL編碼,而是使用JavaScript字符串轉義序列(請參閱Special Characters (JavaScript)Converting Unicode strings to escaped ascii string)。 ó是字符0xF3,因此請在JSON格式的cookie值中使用字符串'\u00F3'。這允許任何客戶端cookie讀取,只是JSON.parse()的值。

的document.cookie

「ProcessArray = [{」 的ProcessID 「:1,」 描述 「:」 Adquisici \ u00F3n德 Articulos」, 「路徑」: 「internalprocess.aspx過程= 1」 }]「

+2

對於互操作性,HTTP標頭應始終爲純ASCII。在將Cookie存儲到標題之前,請在Cookie名稱/值上使用%-UTF8編碼。 – EricLaw

+0

@EricLaw - 我知道,但忘了 - 感謝提醒我。我用更正確的信息更新了答案。 –