これは SDK のバグです loadData(String, ..., ...) メソッドは文字列の内容を uri に変換します。私のコードには % のようにエンコードする必要がある文字が含まれているため、コードが切り捨てられてエラーが発生しました。ここで見つかった解決策は、これらの文字をこのコードとしてユニコードに変換することでした
public final static void webViewLoadData(WebView web, String html) {
StringBuilder buf = new StringBuilder(html.length());
for (char c : html.toCharArray()) {
switch (c) {
case '#': buf.append("%23"); break;
case '%': buf.append("%25"); break;
case '\'': buf.append("%27"); break;
case '?': buf.append("%3f"); break;
default:
buf.append(c); break;
}
}
web.loadData(buf.toString(), "text/html", "utf-8");
}