Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不受欢迎的࿽;webview中的角色_Java_Android_Regex_Webview - Fatal编程技术网

Java 不受欢迎的࿽;webview中的角色

Java 不受欢迎的࿽;webview中的角色,java,android,regex,webview,Java,Android,Regex,Webview,当我直接复制html文件的内容并将其存储在字符串中,然后使用以下命令在webview中显示它时: mWebView.loadDataWithBaseURL("file:///android_asset/", myString, "text/html", "UTF-8", null); 一切都好!我想在加载到webview之前(以编程方式)修改html文件的内容,但在使用下面的代码从资产文件夹读取html文件时 private String loadAssetTextAsString(Cont

当我直接复制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("�", "");
如何删除�? 谢谢你的帮助


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

因此,从
InputStream
中将其读取为UTF-16可能会解决以下问题:

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


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

您可以在WebView中直接打开HTML文件。为什么需要将其读入字符串?可能是InputStreamReader所需的UTF-16BE编码的重复项。感谢@cricket_007的评论。在WebView中加载之前,我需要修改HTML的内容。请尝试
新建InputStreamReader(即“UTF-16”)
正如约佩金指出的,谢谢你@Floern。你的回答对我很有帮助。