大家好, 我从我的数据库中取出一个文本,然后在将文本插入db之前我知道文本的编码是ISO-8859-1,但是在从db获取之后和加载此文本之前我通过此代码检查编码
InputStreamReader is = new InputStreamReader(new ByteArrayInputStream(body.getBytes()));
is.getEncoding();
Log.v("encoding", ""+is.getEncoding());
// String body = fetched from db
我在日志中获取文本的编码是UTF-8。并且使用此方法无法在webview上加载此文本:
mailView.loadDataWithBaseURL(null, body, "text/html", "UTF-8", null);
请建议我解决此问题的正确方法。
答案 0 :(得分:0)
这个回复非常晚,但我偶然发现谷歌的问题,所以我想回答。
如JavaDoc中所述,new InputStreamReader(InputStream)
将创建一个具有系统默认值(显然是UTF-8)的阅读器。 is.getEncoding()
只是返回默认值,可能与您存储的数据匹配也可能不匹配。
通常,最好明确指定流的编码。这意味着您需要将编码与内容一起存储。您可以使用带外知识(例如,我的应用程序仅使用ISO-8859-1),但如果您将来更改所选编码,这将是脆弱的。
由于世界并不总是一个好地方,并且字符串与它们的字符串分开,你可能会看到一个字符集检测器。请参阅http://userguide.icu-project.org/conversion/detection作为示例。