2009-11-25 29 views
8

我想在我正在處理的幾個URL中的URL-escape(百分比編碼)非ascii字符。我正在使用從這些URL加載資源(如圖像和聲音剪輯)的Flash應用程序。由於文件名可以包含非ASCII字符,像這樣: 日本語.jpg 我用UTF-8編碼的字符,然後%的轉義unicode的字節轉義,得到如下:URL轉義爲Internet Explorer的中文/日文Unicode字符

%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg

當我在除Internet Explorer以外的任何瀏覽器中運行應用程序時,這些文件名工作正常 - 我嘗試過Firefox,Safari和Chrome。但是,當我啓動IE中的應用程序(試用過6,8),並嘗試加載聲音片段,我得到: Error #2044: Unhandled ioError和URL已被破壞的東西,如:

æ¥æ¬èª.jpg

任何想法如何解決這個問題?這只是用本地文件系統URL測試驅動Flash應用程序。 我也注意到,Internet Explorer未能夠找到一個文件如: file:///C:/%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg,雖然鉻/ Firefox會對其進行解碼和負載只是罰款與路徑

C:\日本語.jpg

文件編輯

我想我的問題是一樣的人在下面的ActionScript代碼片斷遇到:

import flash.display.Loader; 
import flash.net.URLRequest; 
... 
var ldr:Loader; 
var req:URLRequest = new URLRequest("日本語.jpg"); 
ldr = new Loader(); 
ldr.load(req); 

使用字符串日本語.jpg將在IE中工作,而使用字符串%E6%97%A5%E6%9C%AC%E8%AA%9E.jpg可在其他瀏覽器中使用。我需要的是一種可在所有瀏覽器中工作的單一表單。我嘗試了%u編碼,並將http請求標頭設置爲Content-Type: text/html; charset=utf-8,但百分比轉義或非轉義形式都沒有運氣。

+0

Windows使用UTF-16作爲文件名。所以試試'%65%E5%67%2C%8A%9E'。 – Gumbo 2009-11-25 13:58:28

+0

沒有使用UTF-16名稱的骰子,IE仍然找不到它。 – Bear 2009-11-25 20:40:34

+0

相關:http://stackoverflow.com/questions/75980/best-practice-escape-or-encodeuri-encodeuricomponent – cregox 2011-07-04 22:42:24

回答

1

對不起,沒有解決方案,但可能至少有一些關於可能發生在這裏的更多信息。 (可能你已經想到了這一點,但也許它會幫助其他讀者找到一個解決方案。)「官方」url編碼規範似乎留下了大門,以便如何解碼逃脫的url,像你正在生成的url - 是意圖表示UTF-8字符(如Firefox等解釋它們)或ASCII字符(如IE正在解釋它們)的轉義實體?我不知道有什麼方法來強制解碼策略。

只是一個問題:如果你完全不轉義它們會發生什麼壞事,但是將unicode留在url中?儘管我沒有太多的經驗,但我還是記得在某個地方閱讀的時候,需要在網站上擺脫unicode的日子已經過去了。這可能是錯誤的...

+0

大多數瀏覽器似乎確定與包含Unicode字符的網址。不過,我構建了一個Flex應用程序,並且我的url是指向聲音剪輯,圖像,電影等外部資源的鏈接。當我在Flash插件中運行編譯後的.swf時,只有unicode字符是url/percent逃脫UTF-8。否則,他們只是無法加載。這些百分比轉義的文件名在除Internet Explorer之外的每個瀏覽器中工作正常。 – Bear 2009-11-25 20:57:14

+0

URI/URL(RFC 3986)需要編碼非ASCII字符。另一方面,IRI(RFC 3987)允許大多數Unicode字符未編碼。 IRI是取代舊的URI/URL標準的新標準,但許多系統尚未實施IRI。 IRI規範確實提供了將IRI轉換爲URI/URL的規則,反之亦然。 – 2009-12-09 01:08:39

1

IE瀏覽器使用HTTP URL的UTF-8,但我不確定文件URL(即使我在10年前作爲IE團隊的一部分測試了這種行爲)。如果您在HTML中使用URLS,我實際上建議嘗試使用字符串文字(如果您的頁面編碼爲UTF-8)或數字字符引用(& #dddd;)。 IE通常會將這些字符轉換爲適當的編碼,這些編碼將用於UTF-8,UTF-16用於本地文件系統交互。

它實際上是需要URL轉義的HTTP,而不是HTML解析器。

1

嘗試編碼僅導致URI被錯誤解析的部分。例如,編碼&,?和空格。讓所有其他東西保持原樣,它應該像魅力一樣工作。

如果您仍然遇到問題,您可能需要在您的http標題中將內容類型設置爲utf。像Content-type:text/html;字符集= UTF-8。

+0

不幸的是,我正在使用的框架--Flex--不能處理非轉義的非ascii字符。我需要找出是否有適當的解決方法。我將在Flex框架中進行深入研究,以瞭解是否可以訪問HTTP標頭,但我希望獲得更高級別的解決方案。 – Bear 2009-11-30 21:49:58

1

爲什麼不使用Unicode轉義序列?粘貼到這個HTML網頁的身體,看看我的意思是:

<script type="text/javascript"> 
     var fileName = "日本語.jpg"; 
     document.write(escape(fileName)); 
    </script> 

我拿到%u65E5%u672C%u8A9E.jpg。

+0

這些不幸的是不適合我。這是轉義URL的標準方式嗎? Firefox無法加載以下格式的URL: 'file:///.../% u3400.jpg',對於給定路徑上名爲'㐀.jpg'的文件。 – Bear 2009-11-30 21:37:29

+0

對不起,我想只適用於JavaScript escape/unescape。我試過你的編碼,它適用於我的本地主機。如上所述,您可能需要告訴服務器您在標頭中發送UTF-8。 – Ishmael 2009-11-30 22:22:27

+0

如果您的主機頁面有一個編碼元標記,那麼您應該說服服務器說UTF-8。我會想。也許。 – Ishmael 2009-11-30 22:25:24

1

從我測試過的,我注意到IE不處理編碼文件的URL,但它確實處理正常的http URL,所以這可能是問題。我不確定你是如何加載它們的,但你應該檢查這個問題。

+0

原來是這個問題。 Flash active-x控件(IE)僅加載未編碼的文件URL,而Flash插件(Chrome,Firefox,Safari等)僅加載編碼的文件URL。我已經能夠到目前爲止想到的唯一解決方法是: 如果Flash Player是活動-X 使用未編碼的URL 其他 使用URL編碼的URL 如果你問我有點哈克。 – Bear 2009-12-08 18:52:07

1

file://協議取決於您的操作系統區域設置,如果您的系統設置沒有設置爲中文但英文,則不能讓IE執行此操作。

相關問題