我需要将application / x-www-form-urlencoded数据提交给Web服务器。 服务器期望使用ISO-8859-1对数据进行编码。
不幸的是 URLEncoder.encode(字符串,“ISO-8859-1”); 并不总是有效。
任何不属于ISO-8859-1的字符都会被编码为%3F(即'?')。
Firefox以服务器端的其他方式处理这些字符。
\ uFEFF(零宽度不间断空格)被编码为%26%2365279%3B ,这正是我需要的。
有谁能告诉我如何模仿这种行为/ FF的作用?
答案 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();
}