2016-04-22 12 views
0

Ich kann Sonderzeichen wie Umlaute (z. B. Ä, Ü, Ö, etc.) mit SQLite in Android speichern. Die Eingabe von "ä" ergibt "\ u00E4".Spezielle Zeichen wie Umlaute werden nicht korrekt in android sqlite-Datenbank gespeichert

Ich habe bereits versucht, Code nach einer Zeichenkette in der Datenbank zu speichern, aber nicht helfen:

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

Warum versuchen Sie, nachdem um es in UTF-8 konvertieren Gibt es eine Ausnahme, wenn Sie "content" direkt auf "values.put" setzen? –

+0

Es gibt keine Ausnahme. –

+0

Was genau ist der Fehler? –

Antwort

0

Wie Ich weiß values.put akzeptiert diese Zeichen wie "ä". Aus irgendeinem Grund kann es in SQLite nach Umwandlung in Unicode-Zeichen wie "\u00E4" gespeichert werden. Einfach in diesem Fall speichern Sie es in SQLite wie es ist und konvertieren "\u00E4" wieder in "ä" beim Abrufen dieser Daten. Hier ist die Methode, die diejenigen Zeichen zurückgibt, die Unicode-Zeichen konvertieren.

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

Welches ist Ihr "\u00E4"-"ä" zurückgibt.

UPDATE:

Wenn Sie nicht sicher sind, welche Teile in Unicode konvertiert wird dann Apache commons-lang Bibliothek verwenden diejenigen zu entkommen,

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

Diese Methode ist ein NO-OP. Wenn Sie eine Zeichenfolge in UTF-8 codieren und sie dann erneut als UTF-8 dekodieren, ändert sich die Zeichenfolge überhaupt nicht. – Henry

+0

hat auch nicht für mich funktioniert –

+0

@JohannesN. Methode funktioniert nicht oder Wert nicht in SQLite als Unicode gespeichert? –

0

Versuchen Sie, diese

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

oder gleichwertig kodieren Sie erforderlich

+0

Standardmäßig hat sqlite UTF-8 als Kodierungszeichensatz, oder? –

+0

@JohannesN. yea ... danke für Infos ... sag mir, bei welchen Terminals hast du deinen obigen Code probiert ?? Terminal wie in Handys –

+0

Ich habe nur am Handy (Samsung SII) getestet. –