×
文章路径: Flex

flex编码问题(encodeURI)

发表于3年前(Dec 24, 2014 9:15:35 AM)  阅读 578  评论 0

分类: Flex

标签: decode encode encodeURI URLDecoder URLEncoder

中文处理一直是个很头疼的问题,前台页面到后台程序传值,如果值包含中文,通常我们会在页面对中文进行编码,然后在后台进行一次解码,这种情况能解决大多数问题。然后最近我发现我最终获得的字符串里,“+”全部变成了空格,仔细研究了一下,终于找到了问题所在。

项目是采用前台Flex后台java的形式,编码统一采用UTF-8,“+”对应的UTF-8应该为“%2B”,在java端,使用URLEncoder对字符进行编码,再用URLDecoder进行解码,是不会出问题的。进行debug,发现servlet接收的值里面,字符串里面显示的是“+”,开始没在意,然后用URLDecoder.decode进行解码时,发现“+”全部变成空格,认为是java解码有问题
svg = svg.replaceAll(“\\+”, “@plus@”);
svg = URLDecoder.decode(svg,”UTF-8″);
svg = svg.replaceAll(“@plus@”, “+”);
于是我把“+”在解码前全部替换成特定字符,解码后再替换回来,这也是常用的一种解决方法。后来越想越不对劲,java应该不至于有这种问题,然后试着跑下面的代码
String a = “a++b”;
a = URLEncoder.encode(a, “UTF-8″);
System.out.println(a);
a = URLDecoder.decode(a, “UTF-8″);
System.out.println(a);
没什么问题啊,再细看,终于反应过来,为什么项目中,编码过后“+”还是“+”,而不是“%2B”呢,前台编码是采用的Flex的encodeURI函数,发现他没对“+”进行编码,查看API才发现,这个函数除了不对数字、英文字符不进行编码外,很多特殊字符也不进行编码,其中就包括“+”,编码规则跟java端不一样,导致了问题的产生。

Flex encodeURI函数不进行编码的字符如下:

发表评论