2013-02-15 74 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(); 
}