[英]Cannot receive utf-8 characters by json to Android
我正在構建一個簡單的Android應用程序,該應用程序通過json將項目發送到python網絡服務以存儲在sqlite數據庫中。 此部分工作正常,並且在召回時,這些項目均帶有正確的“åäö”字符。
當我將這些項目放在json中以返回到應用程序時(使用下面的代碼),我不確定。 取而代之的是'\\ xc3 \\ xb6',而不是'ö',我相信它將是utf-8表示形式?
connection = sqlite3.connect('database.db')
connection.text_factory = str
cursor = connection.cursor()
cursor.execute("SELECT item, number FROM Items")
rows = cursor.fetchall()
jsobj = []
for row in rows:
jsobj.append({'number':row[1], 'item':row[0]})
當我解析應用程序中的json對象時,我無法將'\\ xc3 \\ xb6'變回'ö'
這是工作中的Android代碼:
HttpClient client = new DefaultHttpClient();
HttpGet post = new HttpGet(super.url);
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content, "UTF-8"));
JSONArray itemsOnServer = new JSONArray();
itemsOnServer = new JSONArray(reader.readLine());
return itemsOnServer;
結果發送到另一個函數:
ArrayList<Vara> varor = new ArrayList<Vara>();
String vara = "";
int antal;
for (int i = 0; i < json.length(); i++) {
JSONObject object;
try {
object = json.getJSONObject(i);
try {
try {
vara = new String(object.getString("vara").getBytes("ISO-8859-1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} System.out.println(vara);
antal = object.getInt("antal");
varor.add(new Vara(vara, antal));
} catch (JSONException e) {
e.printStackTrace();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
return varor;
除特殊字符外,一切正常。 請幫助,我瘋了。
b'\\xc3\\xb6'
是一個字節字符串,可以將其解碼為包含單個U+00f6 LATIN SMALL LETTER O WITH DIAERESIS
Unicode代碼點的U+00f6 LATIN SMALL LETTER O WITH DIAERESIS
字母U+00f6 LATIN SMALL LETTER O WITH DIAERESIS
Unicode字符串:
>>> b'\xc3\xb6'.decode('utf-8')
u'\xf6'
默認情況下,將sqlite3
text_factory
設置為unicode
,即,如果從代碼中刪除connection.text_factory = str
,則應該收到TEXT
對象的Unicode字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.