2011-05-25 44 views
5

我有一個問題URL解碼Java或UTF-8字符串,用Javascript或ActionScript 3編碼。建立一個測試情況如下:Java和JS/AS3之間的URL解碼/編碼UTF-8的差異(bug !?)

有問題的字符串是Produktgröße

當我與JS/AS3編碼,我得到以下字符串:

escape('Produktgröße') 

Produktgr%F6%DFE

當我未逸出這與JS我沒有得到任何改變

unescape('Produktgr%F6%DFe') 

Produktgr%F6%DFE

所以,這個我認爲JS不正確編碼字符串?

下面的JSP生產本outupt

<%@page import="java.net.URLEncoder"%> 
<%@page import="java.net.URLDecoder"%> 
<%=(URLDecoder.decode("Produktgr%F6%DFe","UTF-8"))%><br/> 
<%=(URLEncoder.encode("Produktgröße","UTF-8"))%><br/> 
<%=(URLEncoder.encode("Produktgröße"))%><br/> 
<%=(URLDecoder.decode(URLEncoder.encode("Produktgröße")))%><br/> 
<%=(URLDecoder.decode(URLEncoder.encode("Produktgröße"),"UTF-8"))%><br/> 

Produktgr的ΔE

Produktgr%C3%B6%C3%9FE

Produktgr%C3%B6%C3%9FE

Produktgröße

Produktgröße

任何想法爲什麼我與語言有這樣的差距,爲什麼JS/AS3不像我期望的那樣行事?

謝謝。

回答

10

轉義是不推薦使用的函數,並且不能正確編碼Unicode字符。使用encodeURIencodeURIComponent,後者可能是最適合您需求的方法。

+0

謝謝,這是我正在尋找的答案! – user710437 2011-05-25 22:28:02

1

Javascript是URL使用Latin-1字符編碼的字符串。 Java是使用UTF-8對URL進行編碼的。

URL編碼實際上只是替換了它無法識別的字符/字節。例如,即使您堅持使用ASCII字符,(也會編碼爲%28。當您開始使用非ASCII字符時(任何超過7位的字符),您都會遇到字符集的其他問題。

1

我一直在努力解決這個問題上幾個小時...... 我的問題是一個jQuery Ajax調用,如:

return $.ajax({ 
     url: '/author!getAuthorContent.action', 
     type: 'GET', 
     data : {author:name, 'content_type': ct || 'all', 'start': start || 0} 
    }); 

「名」是一個包含特殊字符,如傑羅姆 - 塞拉諾

一個String

由於某些原因,JS/JQuery編碼這些特殊字符的方式是不兼容的,我無法在Java BackEnd上解碼它...

解決的辦法是:使用var econded = encodeURIComponent(name);

  • 上JS側

    • 編碼解碼他們在Java方面使用String decoded = java.net.URLDecoder.decode(econded ,"UTF-8");

    一些refetences: http://www.programering.com/a/MjN2ADOwATg.html http://www.theerrormessage.com/2013/10/weird-characters-transmitted-to-and-from-server-through-jquery-ajax-call/