2012-10-16 5 views
1

UITextField의 콘텐츠를 PHP 스크립트로 게시하고 나중에 읽을 수 있도록 데이터베이스에 저장하는 앱을 만들고 있습니다. 나는 이모티콘으로 일하는 시간을 가지고있다. JSON을 사용하여Emojis가 상자로 표시됩니다.

, 나는이 같은 응답을 얻을 것이다 :

content = "\Uf44d"; 
id = 104; 
time = 1350359055; 

이 경우를 나는 이모티콘을 사용했다. 하지만 내가 [dictionary objectForKey:@"content"]을하면 상자가 나타납니다.

UTF-8로 변환해야한다고 생각합니다. 그러나 나는 완전히 확신하지 못한다. 도와주세요!

답변

0

U+F44D은 "개인 사용 영역"U+E000..U+F8FF에서 유니 코드 문자입니다 :

내용은 아래 라인 라인 replcare.

반면에 U+1F44D은 "THUMBS UP SIGN"이므로 웹 서비스가 0xFFFF 이상의 유니 코드 문자에 대해 올바른 JSON 응답을 생성하지 않을 수 있습니다.

JSON RFC에 따르면 "Basic Multilingual Plane"의 일부가 아닌 문자는 UTF-16 서로 게이트 쌍을 사용하여 이스케이프 처리 할 수 ​​있습니다. U+1F44D 문자의 경우 JSON 유니 코드 이스케이프 시퀀스는 "\ ud83d \ udc4d"입니다.

다음 코드

는 일반적으로 작동하는지 보여줍니다

const char *s = "{ \"content\": \"\\ud83d\\udc4d\", \"id\": 104, \"time\": 1350359055 }"; 
NSData *jsonData = [NSData dataWithBytes:s length:strlen(s)]; 
NSError *error; 
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error]; 
self.label.text = [jsonDict objectForKey:@"content"]; 

이 레이블에 제대로 "엄지 손가락 기호"를 표시합니다.

문자를 이스케이프 할 필요는 없지만 웹 서비스는 UTF-8 시퀀스를 보낼 수도 있습니다.

1

나는 이것이 당신을 도울 것이라고 희망한다. 나는 이것을 사용하고있다. e106는 나의 그림 이력 코드이다. 그건 아마 표시 할 문자되지 않도록,

content = [NSString stringWithFormat:@"%C", 0xe106]; 
관련 문제