Java 不受欢迎的;webview中的角色
当我直接复制html文件的内容并将其存储在字符串中,然后使用以下命令在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
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。你的回答对我很有帮助。