webview中不受欢迎的 字符

时间:2016-04-18 20:22:01

标签: java android regex webview

当我直接复制我的html文件的内容并将其存储在字符串中时,请使用以下命令在webview中显示:

mWebView.loadDataWithBaseURL("file:///android_asset/", myString, "text/html", "UTF-8", null); 
一切都好!我想在加载到webview之前修改我的html文件的内容(以编程方式),但是当我使用下面的代码从资产文件夹中读取html文件时

private String loadAssetTextAsString(Context context, String name) {
    BufferedReader in = null;
    try {
        StringBuilder buf = new StringBuilder();
        InputStream is = context.getAssets().open(name);
        in = new BufferedReader(new InputStreamReader(is, "UTF-8"));

        String str;
        boolean isFirst = true;
        while ( (str = in.readLine()) != null ) {
            if (isFirst)
                isFirst = false;
            else
                //buf.append('\n');
                buf.append(str);
        }
        return buf.toString();
    } catch (IOException e) {
        Log.e("TAG", "Error opening asset " + name);
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                Log.e("TAG", "Error closing asset " + name);
            }
        }
    }

    return null;
}

然后在webview中加载它,webview意外地显示 字符(我认为它的名字是软连字符)。我在我的html文件中使用了UTF-8作为字符集。我也使用下面的代码来删除失败的。。

myString = myString.replace("�", "");

如何删除 ?谢谢你的帮助。

� character

1 个答案:

答案 0 :(得分:1)

您的内容看起来像是以UTF-16编码,其中每个字符使用两个字节而不是一个+,如UTF-8。 简单的ASCII字符以UTF-16中的空字节\0为前缀,当您尝试显示时,它会转换为。。

因此,从InputStream读取UTF-16可能会解决问题:

in = new BufferedReader(new InputStreamReader(is, "UTF-16"));

String.replace("�", "")不起作用,因为您看到的�符号与字符串中编码的符号不同。如果在解码过程中将其保留为UTF-8,那么直接替换空字节\0可能会有效:String.replace("\0", "")