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