ディープリンクを使用していますが、日本語の文字列を Web から Android に IntentFilter 経由で渡すときに問題が発生しました。いくつかのコードがあります:
Html コードで webview を初期化しています:
String encode = URLEncoder.encode("namhv://category?category_name=レビュー", "UTF-8");
Log.e(TAG, "Url Encode: " + encode);
Log.e(TAG, "Url Decode:" + URLDecoder.decode(encode, "UTF-8"));
WebView webView = (WebView) findViewById(R.id.wv_content);
webView.getSettings().setJavaScriptEnabled(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
String html = "<html><body>\n" +
"<br><a href=\"" + encode + "\">test go tab</a><br>" +
"</body></html>";
Log.e(TAG, html);
webView.loadData(html, "text/html", "UTF-8");
ハンドルの意図:
public boolean handleDeepLinkEvent(Intent intent) throws UnsupportedEncodingException {
if (intent.getData() != null) { //deep link
String cateName = intent.getDataString();
Log.e(TAG, cateName);
Log.e(TAG, URLDecoder.decode(cateName, "UTF-8"));
return true;
}
return false;
}
(1) 元の文字列: namhv://category?category_name=レビュー
(2) UTF8エンコード後の文字列: namhv%3A%2F%2Fcategory%3Fcategory_name%3D%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC
(3) インテント経由で受け取った文字列: namhv://category?category_name=%C3%A3%C6%92%C2%AC%C3%A3%C6%92%E2%80%9C%C3%A3%C6%92 %C2%A5%C3%A3%C6%92%C2%BC
(4) UTF8 でデコードした後の文字列: namhv://category?category_name=レビュー 私の予想では、(2) と (3) は同じで、(1) と (4) も同じです。しかし、IntentFilter を介して渡されたときに Android が文字列をどのように処理するかはわかりません。