URL编码任意字符

时间:2013-02-15 03:45:42

标签: java url urlencode

我需要将application / x-www-form-urlencoded数据提交给Web服务器。 服务器期望使用ISO-8859-1对数据进行编码。

不幸的是 URLEncoder.encode(字符串,“ISO-8859-1”); 并不总是有效。

任何不属于ISO-8859-1的字符都会被编码为%3F(即'?')。

Firefox以服务器端的其他方式处理这些字符。

\ uFEFF(零宽度不间断空格)被编码为%26%2365279%3B ,这正是我需要的。

有谁能告诉我如何模仿这种行为/ FF的作用?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题:

FF将不可映射的字符转换为十进制HTML实体,并使用字符集对这些字符进行编码。

\ uFEFF - > &安培; #65279; (忽略其间的空格) - > %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();
}