0

我正在尝试从 sqlite 数据库中获取一些 utf-8 编码(西班牙语文本)数据,然后将其显示在 webview 中。代码的基本部分如下:

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

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

我哪里做错了?

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

4

3 回答 3

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;
    }
于 2013-09-25T13:23:51.867 回答
1

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

看看这个有用的链接。

我对一些西班牙字符也有同样的问题,例如á,我通过将 á 替换为\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++ 或任何 Web 平台中使用 str 了!

于 2013-09-25T11:25:14.957 回答
1

可以使用以下方法改进 Mick 的答案StringBuilder

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();
}
于 2013-12-09T06:41:26.277 回答