objective - c 와 js 사이 에 중국어 난 코드 전달

5805 단어 Objective-C
최근 js 재 작성 oc framework 에 관 한 작은 프로젝트 를 하 다가 많은 문제 가 생 겼 습 니 다.
 
그 중에서 방금 만난 것 은 둘 사이 에 중국어 문 자 를 전달 하고 특수 문 자 를 가 진 URL 문자열 입 니 다.
상세 한 소 개 는 많이 하지 않 을 것 이 고, 나중에 나중에 다시 총 결 을 할 것 이다.
 
oc 는 js 에 중국 어 를 전달 합 니 다. 처음에 문 자 를 UTF - 8 로 인 코딩 해 야 한다 고 생각 했 지만 문제 가 해결 되 지 않 았 습 니 다.
나중에 야 알 게 되 었 습 니 다. 원래 전달 문자열 이 js 에 갔 는데 원래 의 값 을 복사 할 뿐 어 지 러 운 코드 문제 가 발생 하지 않 았 습 니 다. 문 제 는 js 가 oc 에 중국 어 를 전달 할 때 반드시 인 코딩 해 야 한 다 는 것 입 니 다.
 
처음에 제 가 사용 한 인 코딩 방식 은 encodeURIComponent 였 지만 OC 에 전달 되 었 고 디 코딩 된 것 은 아직도 모 르 는 문자열 이 었 습 니 다.
나중에 js 를 살 펴 보 니 인 코딩 방식 인 encodeURI 가 있어 서 기 쁘 게 성 공 했 습 니 다.
js :

var title = encodeURI('  ');



oc :



[value stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

 
url 에 대해 서 는 url 에 특수 문자 가 존재 할 수 있 기 때 문 입 니 다:! @ # $& *( ) = : / ; ? + ',js 쪽 에 전달 이 안 되 기 때문에 OC 쪽 에서 URL 을 인 코딩 해 야 합 니 다.
 1 + (NSString *)urlencode:(NSString *)uncodeString {

 2     NSMutableString *output = [NSMutableString string];

 3     const unsigned char *source = (const unsigned char *)[uncodeString UTF8String];

 4     int sourceLen = strlen((const char *)source);

 5     for (int i = 0; i < sourceLen; ++i) {

 6         const unsigned char thisChar = source[i];

 7         if (thisChar == ' '){

 8             [output appendString:@"+"];

 9         } else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' ||

10                    (thisChar >= 'a' && thisChar <= 'z') ||

11                    (thisChar >= 'A' && thisChar <= 'Z') ||

12                    (thisChar >= '0' && thisChar <= '9')) {

13             [output appendFormat:@"%c", thisChar];

14         } else {

15             [output appendFormat:@"%%%02X", thisChar];

16         }

17     }

18     return output;

19 }

js 쪽 에서 url 을 변환 해서 사용 해 야 한다 면 decodeURIComponent 방법 을 간단하게 호출 하면 원래 의 url 값 을 얻 을 수 있 습 니 다.
 
 
후속 적 으로 풍부 해 지면 사실 이곳 에는 배 울 것 이 매우 많다!

좋은 웹페이지 즐겨찾기