从数据库中获取utf-8编码的字符串,然后在webview中显示

时间:2013-09-25 11:04:52

标签: android utf-8

我试图从sqlite数据库中挖掘一些utf-8编码(西班牙文本)数据,然后在webview中显示它。代码的基本部分如下:

String web_data_string = cursor.getString(0);
webview.loadData(web_data_string, "text/html", "utf-8");

该字符串是一个包含所有正常字符的单词,除了一个应该是小写e + acute的字符。在webview中,所有正常字符都正确显示,但e + acute显示为两个字符,A +代字号后跟版权符号。

我哪里出错了?

编辑: +1到dd619以获得可以使用的解决方案,但我希望有一个更通用的解决方案,其他语言中可能还有更多特殊字符。< / p>

3 个答案:

答案 0 :(得分:2)

这就是诀窍......

    String web_data_string = cursor.getString(0);
    webview.loadData(utf_eight_to_web(web_data_string), "text/html", "utf-8");

    String utf_eight_to_web(String str)
    {
        String ans = "";
        Character c;
        for(int i = 0;i<str.length();i++)
        {
            c = str.charAt(i);
            if (c <= 127)
            {
                ans += str.charAt(i);
            }
            else
            {
                ans += String.format("&#%d;",(int)c);
            }
        }
        return ans;
    }

答案 1 :(得分:1)

如果您有任何特殊字符/字母,则需要将其替换为相应的转义字符序列。

Have a look at this useful link.

我对一些西班牙语字符有同样的问题,例如。á我通过用\u00e1替换á来解决它

e.g. if you want to print "Parámetros" then simply do.

String str="Parámetros";
str=str.replace("á","\u00e1");
Log.i("MyClass",str);

现在你可以使用数据库或java或C ++或任何网络平台!

答案 2 :(得分:1)

使用StringBuilder

可以改善Mick的答案
private String utfEightToWeb(String str)
{
    StringBuilder stringBuilder = new StringBuilder();
    Character c;
    for (int i = 0; i<str.length(); i++) {
        c = str.charAt(i);
        if (c <= 127) {
            stringBuilder.append(str.charAt(i));
        } else {
            stringBuilder.append(String.format("&#%d;",(int)c));
        }
    }
    return stringBuilder.toString();
}