2013-02-15 63 views
1

我需要將應用程序/ x-www-form-urlencoded數據提交給Web服務器。 服務器期望數據使用ISO-8859-1進行編碼。URL編碼任意字符

不幸的是URLEncoder.encode(字符串,「ISO-8859-1」);並不總是有效。

任何不屬於ISO-8859-1的字符都被編碼爲%3F(即'?')。

Firefox處理那些在服務器端工作的其他方式的字符。

\ uFEFF(零寬度無斷裂空間)編碼爲%26%2365279%3B這正是我所需要的。

任何人都可以請告訴我如何模仿這種行爲/ FF做什麼?

+3

有點相關的前面的討論[這裏](http://stackoverflow.com/questions/8323009/url-encode-behaving-differently-in-firefox-and-internet-explorer) – Floris 2013-02-15 03:49:29

+0

它更多的是讓IE使用UTF-8編碼。 – LaughingMan 2013-02-16 17:14:24

回答

1

要回答我的問題:

FF不可映射的字符轉換爲十進制HTML實體編碼使用的字符集的。

\ uFEFF - >  (忽略之間的空間) - >%26%2365279%3B

(%26 = & |%23 =#|%3B =)

這裏是做在Java中第一步驟的方法:

public static String htmlEscapeUnmappableCharaters(String source, String charset) { 
    CharsetEncoder cse = Charset.forName(charset).newEncoder(); 

    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < source.length(); i++) { 

     if (cse.canEncode(source.charAt(i))) { 
      sb.append(source.charAt(i)); 
     } else { 
      sb.append('&'); 
      sb.append('#'); 
      sb.append(source.codePointAt(i)); 
      sb.append(';'); 
     } 
    } 

    return sb.toString(); 
}