Кодиране на JSON за поддръжка на UTF-8 знаци в приложение за Android

Опитвам се да покажа utf-8 символ в ListView в моето приложение за android, но това, което се появява, е поредица от въпросителни????? Ето как изглежда изходът:

[{"ImageID":"1","ItemID":"Item1","ItemID_AM":"????
???","ImagePath":"http:\/\/10.0.2.2\/android\/Pagination\/pics\/pic_a.png"},{"ImageID":"2","ItemID":"Item2","ItemID_AM":"????
????","ImagePath":"http:\/\/10.0.2.2\/android\/Pagination\/pics\/pic_b.png"},...

Вече използвах: header('content-type: application/json; charset=utf-8'); Но нищо не се промени. Може ли някой да помогне, моля?

Благодаря.


person B3738    schedule 04.10.2013    source източник
comment
Вашият списъчен изглед наистина ли показва JSON? Или това е входът JSON, който показвате във вашия въпрос? Моля, използвайте fiddler или подобен инструмент, за да заснемете предадените JSON данни и да ги добавите към въпроса си. И моля, добавете кода за искане на данните и анализиране на JSON.   -  person Codo    schedule 04.10.2013
comment
Бихте ли опитали да покажете пълния JSON във вашия textView, вашият JSON може да не е правилно кодиран 'utf-8'. Ако вашите данни идват от db, опитайте това: mysql_set_charset('utf8',$dbLink);   -  person A.S.    schedule 04.10.2013
comment
Имам база данни и използвах php, за да конвертирам резултатите в json формат и след това искам да се показва в моя Android ListView.   -  person B3738    schedule 04.10.2013
comment
Така че контролният списък трябва да изглежда така: 1.) Набор от символи на вашия TEXT/VARCHAR = utf-8? 2. mysql_set_charset('utf8',$dbLink); ? 3. php-код, записан като utf8 charset   -  person A.S.    schedule 04.10.2013
comment
Но в базата данни на mysql всички знаци се показват правилно, но когато я преглеждам в json, въпросителният знак ???? появява се. Така че въпросителният знак също се показва в моя Android ListView, защото това е, което получава от json.   -  person B3738    schedule 04.10.2013
comment
Какво се случва, когато заредите JSON с браузър?   -  person Alastair McCormack    schedule 07.10.2013
comment
Аластър Маккормак показва серия от въпросителни знаци. В резултат на това той също показва въпросителен знак в моя Android ListView.   -  person B3738    schedule 08.10.2013
comment
Вижте stackoverflow.com/questions/19362095/   -  person Alastair McCormack    schedule 15.10.2013


Отговори (1)


Java низовете използват Unicode, а JSON низовете са UTF-8 кодирани. Най-вероятно трябва да конвертирате UTF-8 JSON в Unicode.

Търсене: java string utf8, например Как да конвертирате низове към и от UTF8 байтови масиви в Java

Най-лесният начин обаче би бил да оставите подходяща JSON библиотека да извърши декодирането. Може би org.json - Android или Как да анализирате JSON в Android е от помощ.

Актуализация:

Може би всичко е наред и просто шрифтът не може да покаже необходимите знаци. Ако случаят е такъв, решението на проблема би било инсталирането на подходящ шрифт.

person Olaf Dietsche    schedule 08.10.2013
comment
Добре, Олаф, ще го проверя. - person B3738; 09.10.2013
comment
какво е кодирането на Java низове? Всеки уникод трябва да бъде кодиран, за да може да се съхранява в паметта. - person Jai Pandit; 05.08.2016
comment
Вижте Oracle - Class String String представлява низ във формат UTF-16 .... Има и Oracle - Unicode символни представяния Типът данни char ... се основава на оригиналната Unicode спецификация, която дефинира символите като 16-битови обекти с фиксирана ширина. Stackoverflow също има доста въпроси по темата, stackoverflow.com/search?q=java+string+internal +представяне - person Olaf Dietsche; 05.08.2016