gpt4 book ai didi

java - WebView 中不受欢迎的字符

转载 作者:行者123 更新时间:2023-11-30 01:23:57 24 4
gpt4 key购买 nike

当我直接复制我的 html 文件的内容并将其存储在一个字符串中,然后在 webview 中使用:

mWebView.loadDataWithBaseURL("file:///android_asset/", myString, "text/html", "UTF-8", null); 

一切正常!我想在加载到 webview 之前(以编程方式)修改我的 html 文件的内容,但是当我使用以下代码从 Assets 文件夹中读取 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

最佳答案

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

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

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

String.replace("�", "") 不起作用,因为您看到的 � 符号与它在字符串中的编码不同。也许直接替换空字节 \0 可以工作,如果它在解码过程中被保留为 UTF-8:String.replace("\0", "").

关于java - WebView 中不受欢迎的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36703580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com