在项目中遇到一个问题,在webveiw和原生之间进行传值的时候,出现了一些encode的小问题。看起来很简单的问题,实际上却存在不小的坑。
首先说一下目前项目的结构,在一个activity中,webview和原生之间有多种交互。
如图所示
在原生调用webview方法,这种协议已经非常常用了,直接调用loadJS();但是自定义协议这个过程,使用的拦截跳转的方式,按照预定的协议来解析数据,这里面就有一些情况,比如数据中出现了中文,webview会encode这部分内容,这就要求我们对拦截以后的内容进行decode。
见下方代码:
1 privateString decodeUrl(String url) {2 try{3 return URLDecoder.decode(url, "utf-8");4 } catch(UnsupportedEncodingException e) {5 e.printStackTrace();6 }7 return "";8 }
上面这段代码,看上去是很合理的,但是老司机们认真看看,这里面有坑。
首先看一下底层代码的decode。
/***@throwsUnsupportedEncodingException if {@codecharsetName} is not supported.*/
public stati