0

大家好,我正在从我的数据库中获取文本,在将文本插入数据库之前,我知道文本的编码是 ISO-8859-1,但是在从数据库中获取之后并在加载此文本之前,我正在通过此代码检查编码

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);

请建议我解决此问题的正确方法。

4

1 回答 1

0

这个回复太晚了,但我通过谷歌偶然发现了这个问题,所以我想我会回答的。

如 JavaDoc 中所述,new InputStreamReader(InputStream)将使用系统默认值(显然是 UTF-8)创建一个阅读器。is.getEncoding()只是返回可能与您存储的数据匹配或不匹配的默认值。

通常,明确指定流的编码是个好主意。这意味着您需要将编码与内容一起存储。您可以使用带外知识(例如,我的应用程序仅使用 ISO-8859-1),但是如果您将来更改您选择的编码,这将是脆弱的。

由于这个世界并不总是一个美好的地方,并且字符串与它们的字符集分开,你可能会研究一个字符集检测器。以 http://userguide.icu-project.org/conversion/detection为例。

于 2015-02-13T03:19:30.930 回答