簡體   English   中英

無法通過json接收utf-8字符到Android

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM