Установка текста TextView как неанглоязычного текста, полученного из ответа JSON - PullRequest
0 голосов
/ 13 марта 2012

Я получаю обратно имена (Foursquare) мест с серверного вызова, где имена возвращенных мест могут быть на английском или не английском языке.

Предположим, что имя места находится в объекте JSON следующим образом:

{...
 "name":"venue name which can be in any language"
...}

Я создаю JSONObject из этого ответа, а затем вытаскиваю название места следующим образом:

String name = jsonObject.getString("name");

Наконец, я устанавливаю текст TextView для отображения названия места следующим образом:

myTextView.setText(name);

Однако для арабских имен я нахожу, что там, где арабские символы объединены в исходном объекте JSON (как и должно быть), символы, которые отображаются в приложении (т. Е. В TextView), не пересекаются. (Я не слишком знаком с другими языками, поэтому не могу точно сказать, неправильно ли они отображаются.)

Есть ли что-то еще, что я должен сделать, чтобы правильно извлекать неанглийские имена из объекта JSON и задавать его в качестве текста TextView, или это зависит от телефона, чтобы решить, как текст будет отображаться?

Редактировать: Я попытался проанализировать ответ сервера (как предложено @bbedward), явно указав кодировку содержимого в формате UTF-8 следующим образом ...

HttpEntity httpEntity = httpResponse.getEntity();
String responseMessage = EntityUtils.toString(myHttpEntity, "UTF-8");
JSONObject jsonObject = new JSONObject(responseMessage);

... но все равно нет радости. (Арабские символы появляются, как и прежде, в словах, где они должны быть объединены, не пересекаются.) Может ли это быть телефонной вещью или нужно сделать что-то дополнительное, чтобы слова / символы правильно отображались на неанглийских языках? Возможно, серверу необходимо явно указать заголовок «Content-Type» со значением «UTF-8»?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2014

добавить эту строку при подключении к mysql:

mysql_set_charset('utf8', $con);

ex:

$con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysql_set_charset('utf8', $con);
mysql_select_db(DB_DATABASE);
0 голосов
/ 13 марта 2012

Я все равно отвечу, я догадываюсь вы не получите свой JSON в UTF-8, так как у меня была похожая проблема, я думаю, что JSON не придет другим путем.

Полный пример

Единственное, о чем стоит позаботиться, это установить кодировку для InputStreamReader и создать JSONObject

private DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
    HttpPost httppost = new HttpPost("http://myjsonurl.com/search?type=json");
    // Depending on your web service
    httppost.setHeader("Content-type", "application/json");
        try
        {
            String result = null;
            HttpResponse response = httpclient.execute(httppost);           
            HttpEntity entity = response.getEntity();

            InputStream inputStream = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"), 8);
            StringBuilder sb = new StringBuilder();

            String line = null;
            while ((line = reader.readLine()) != null)
            {
                sb.append(line + "\n");
            }
            JSONObject myJObject = new JSONObject(sb.toString();
        }
        catch (Exception e)
        {
        }
        finally
        {
            try{if(inputStream != null)inputStream.close();}catch(Exception none){}
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...