2012-09-14 2 views
5

다음 결과에 대한 불일치의 원인을 누구에게 말해 줄 수 있습니까?iOS 유니 코드 문자가있는 NSLog 오류

completionHandler:^(NSArray *placemarks, NSError *error) { 
    NSLog(@"\n placemarks%@", placemarks); 

결과 :

placemarks(
"\U039b\U03b5\U03c9\U03c6\U03cc\U03c1\U03bf\U03c2 \U039a\U03cd\U03c0\U03c1\U03bf\U03c5 163, 16451 \U0391\U03c1\U03b3\U03c5\U03c1\U03bf\U03cd\U03c0\U03bf\U03bb\U03b7\U03c2, \U0395\U03bb\U03bb\U03ac\U03c2 @ <+37.90085408,+23.75654648> +/- 100.00m, region (identifier <+37.90085408,+23.75654648> radius 141.62) <+37.90085408,+23.75654648> radius 141.62m" 
) 

for(id object in placemarks) {NSLog(@"%@ \n", object);} 

2012-09-14 13:08:23.493 ΑΦΜ[1390:c07] Λεωφόρος Κύπρου 163, 16451 Αργυρούπολης, Ελλάς @ <+37.90085408,+23.75654648> +/- 100.00m, region (identifier <+37.90085408,+23.75654648> radius 141.62) <+37.90085408,+23.75654648> radius 141.62m 

을 결과는 감사

답변

6

흥미롭게 :)

NSLog의 형식 문자열에 %@을 전달하면 'description 개체에 전화'를 의미합니다.

NSArray에있는 description은 각 개체의 description과 다르게 유니 코드 문자를 처리합니다.

NSArray의 설명 메서드가 포함 된 각 개체에 대한 설명을 호출 한 다음 어떤 이유로 약 100 % 확신 할 수 없다고 생각하면 NSLog으로 덤프하기 전에 인코딩하는 것입니다.

3

%@에서 NSLog을 전달하면 배열에 [NSArray description]가 호출됩니다. NSArray class reference[NSArray description] "배열의 내용을 나타내는 문자열을 반환하며 속성 목록으로 서식이 지정되었습니다"라고 말합니다. 이렇게하면 유니 코드 문자가 NSNonLossyASCIIStringEncoding으로 변환됩니다. 프로세스를 취소하면 NSArray가 올바르게 인쇄됩니다.

이것은 [NSLog description]에 의해 수행되었던 NSNonLossyASCIIStringEncoding을 반전 NSString에 C 문자열을 한 후, C 문자열에 \ Uxxxx에 인코딩 보편적 모든 문자로 원래 문자열 변환 디코딩하여 작동
completionHandler:^(NSArray *placemarks, NSError *error) { 
     NSLog(@"%@", [NSString stringWithCString:[[placemarks description] cStringUsingEncoding:NSASCIIStringEncoding] encoding:NSNonLossyASCIIStringEncoding]); 

. 첫 번째 C 문자열로 변환하지 않고이 작업을 수행 할 방법을 찾지 못했습니다.

관련 문제