Не можете найти кодировку для более чем одного языка в NSData (iPhone SDK)? - PullRequest
0 голосов
/ 01 марта 2012

Я пытался найти кодировку для строк ниже json за день. Я получаю строку jSon как

[
  {
    "ParentId": "154",
    "TopMenuId": "159",
    "MainMenuText": "开放时间",
    "Language": "6",
    "MenuImage": ""
  },
  {
    "ParentId": "154",
    "TopMenuId": "166",
    "MainMenuText": "СЕРТИФИКАЦИЯ ISO",
    "Language": "8",
    "MenuImage": ""
  }
]

с браузером это выглядит нормально. но когда я получаю NSData String Encoding в NSLog, он показывает,

[
  {
    "ParentId": "154",
    "TopMenuId": "159",
    "MainMenuText": "开放时间",
    "Language": "6",
    "MenuImage": ""
  },
  {
    "ParentId": "154",
    "TopMenuId": "166",
    "MainMenuText": "СЕРТИФИКАЦИЯ ISO",
    "Language": "8",
    "MenuImage": ""
  }
]

Я использовал почти все кодировки CFString, но все еще не добился успеха.

Примечание: Когда я помещаю NSLog в Браузер, все выглядит хорошо. но когда он сохраняет его в xcdatamodeld со строкой, он сохраняется в формате & # 1057.

пожалуйста, помогите мне .. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 01 марта 2012

ОК, мы говорим о двух разных видах кодирования. Любая строка в первую очередь кодируется как последовательность байтов . То есть строка "биты" кодируется как эти биты в кодировке ASCII:

01100010 01101001 01110100 01110011

Это та кодировка, о которой мы говорим в коде:

[[NSString alloc] initWithData:... encoding:NSUTF8StringEncoding]

Но проблема не в этом. Ваша строка закодирована в ASCII, но символы в ней представлены не как их действительные символы, а как объекты XML / HTML. То есть вместо буквы С, закодированной в UTF-8, у вас есть HTML-сущность С, байтная кодировка которой не имеет значения.

Вам необходимо либо декодировать эти HTML-сущности этих символов, либо не кодировать их HTML перед их отправкой. Наличие в сущности HTML представлений символов в строке JSON довольно необычно и излишне.

0 голосов
/ 01 марта 2012

Наконец я решил проблему.Чтобы преобразовать сущность HTML в исходную строку, выполните следующие действия.

1) загрузите content.
2) добавьте файлы GTMNSString + HTML.h .m и NSString + html.h .m вваш проект.
3) предположим, что возвращаемой строкой является 'allData', затем преобразуйте ее в исходную строку с помощью функции
[allData stringByDecodingHTMLEntities].

Вот и все.получил вашу оригинальную строку !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...