Java URL编码任意字符

Java URL编码任意字符,java,url,urlencode,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做什么?回答我

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

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

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

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

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


谁能告诉我如何模仿这种行为/FF做什么?

回答我自己的问题:

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();
}
公共静态字符串HtmleScapeUnmappableCharacters(字符串源,字符串字符集){
CharsetEncoder cse=Charset.forName(Charset.newEncoder();
StringBuilder sb=新的StringBuilder();
对于(int i=0;i
回答我自己的问题:

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();
}
公共静态字符串HtmleScapeUnmappableCharacters(字符串源,字符串字符集){
CharsetEncoder cse=Charset.forName(Charset.newEncoder();
StringBuilder sb=新的StringBuilder();
对于(int i=0;i
与前面的讨论有些相关,更多的是让IE使用UTF-8编码。与前面的讨论有些相关,更多的是让IE使用UTF-8编码。