我试图从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>
答案 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
:
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();
}