2009-09-23 49 views
2

我有一個Asp.Net Web應用程序哪些用戶包括腳本標籤在他們的網頁,並 從我的服務器(使用JSONP &通用處理器(ASHX))獲取數據字符編碼問題 - 跨域腳本

數據以希伯來語編寫,我在響應中將字符集設置爲utf-8。

當客戶端網站(顯示數據)使用「windows-1255」 時,我看不到正確的文本。

該腳本可以包含在任何具有任何字符集的網頁中。

我是否需要轉換我的數據或設置不同的響應字符集屬性?

感謝 亞龍

回答

3

當客戶端網站(顯示數據)使用「windows-1255」時,我看不到正確的文本。

是的。這是事情:當你服務於<script>時,你可以在響應的Content-Type中設置'charset'參數爲你喜歡的任何東西,但IE會忽略你並使用源頁面的編碼。 (也許還有其他一些瀏覽器。)

所以,如果您在使用JSONP或其他基於腳本標記的方式來提取數據,那麼該數據必須與原始頁面或純ASCII使用相同的編碼。如果您爲可能不同編碼的許多網頁提供外部服務,則必須堅持使用ASCII。

這意味着您的JSON編碼器必須將字符串文字中的所有非ASCII字符轉換爲其JS轉義形式,例如\u20AC而不是原始的€。

+0

謝謝。 你知道這個功能嗎? 我假設我需要在每一邊(JS&C#) – Yaron 2009-09-23 13:23:44

+0

你不需要在JS端,JS本身理解\ uxxxx編碼。你需要C#端的東西來創建這些編碼 – AnthonyWJones 2009-09-23 14:19:40

+0

JS端只會工作,'\ u'-escapes是JavaScript字符串文本的本地部分。我還沒有對.NET的所有JSON實現進行調查,但快速瀏覽一下,LitJSON似乎將非ASCII編寫爲轉義。 http://litjson.sourceforge.net/ – bobince 2009-09-23 14:23:56

1

它可能會更好,你清楚地說明你的客戶,你的界面使用UTF-8編碼。當他們將數據轉發給客戶時,他們應該將Response.CharSet設置爲UTF-8。當然,你正在爲了你的目的而做這件事嗎?

+0

客戶端(測試)站點正在使用「windows-1255」並正確顯示希伯來字符。 我的數據也是用希伯來語,但我不能顯示它,除非我使用utf-8並將其頁面編碼更改爲utf-8 Firefox和Chrome都能正常工作(我正確地看到數據),但IE7堅持認爲頁面編碼是utf-8。 當我在我的服務器上獲取我的數據時,我將Response.Charset設置爲「utf-8」。 我假設IE7忽略了這個設置,並使用html頭部分(meta標籤)中定義的值。 – Yaron 2009-09-23 12:23:01

+0

@Yaron:我明白了,我對JSONP並不熟悉,Bobince有這方面的內容。我之前在直接轉發的非跨域javascript場景中看到過這個IE問題,其中文件的編碼方式不同。 – AnthonyWJones 2009-09-23 14:18:02