在Android sqlite数据库中没有正确保存像Umlaute这样的特殊字符

时间:2016-04-22 09:56:00

标签: android sqlite character-encoding special-characters

我无法在Android中使用sqlite保存像umlaute这样的特殊字符(例如Ä,Ü,ö等)。键入“ä”会产生“\ u00E4”。

我已经尝试使用以下代码在数据库中保存字符串,但没有帮助:

ContentValues values = new ContentValues();

String content = comment.getContent().toString();
byte[] chars = content.getBytes("UTF-8");
String utf8Content = new String(chars, "UTF-8");

values.put(DBHandler.CONTENT,utf8Content);

2 个答案:

答案 0 :(得分:0)

试试这个

SQLiteDatabase.execSQL("PRAGMA ENCODING=UTF-8;");

或您需要的等效编码

答案 1 :(得分:0)

据我所知,values.put接受"ä"之类的字符。出于某种原因,将其转换为SQLite之类的Unicode字符后,可以将其保存在"\u00E4"中。在这种情况下,只需将其保存在SQLite中,然后在检索该数据时将"\u00E4"再次转换为"ä"。这是返回从Unicode字符转换的字符的方法。

public String getCharacterFromUnicode (String unicodeChar){    
    String returnString = null
    try {
        byte[] utf8 = unicodeChar.getBytes("UTF-8");
       returnString = new String(utf8, "UTF-8");
    }catch (Exception ex){    
    }
    return returnString;
}

"\u00E4"返回"ä"

更新:

如果您不确定哪些部分转换为Unicode,请使用Apache commons-lang库来逃避这些部分,

myString = org.apache.commons.lang.StringEscapeUtils.unescapeJava(myString);