2012-06-27 2 views
4
NSString * string = @"االْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ"; 
    const char *c = [string cStringUsingEncoding:NSUTF8StringEncoding]; 

    NSString *newString = [[NSString alloc]initWithCString:c encoding:NSISOLatin1StringEncoding]; 
    NSLog(@"%@",newString); 


// NSString * staticEncodedString = @"اÙÙØ­ÙÙ Ùد٠ÙÙÙÙÙÙ٠رÙبÙ٠اÙÙعÙاÙÙÙ ÙÙÙÙ"; 
    const char *cvvv = [newString cStringUsingEncoding:NSISOLatin1StringEncoding]; 
    NSString *newStringV = [[NSString alloc]initWithCString:cvvv encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@",newStringV); 

왜 직접적으로 주석 처리됩니까? 인코딩 된 문자열이 아랍어로 변환되지 않는 이유는 무엇입니까? 아랍어로 인코딩하고 올바르게 디코딩 할 때 왜 아랍어로 읽을 수없는 정적 인코딩 된 문자열을 읽을 수 없습니까?직접적인 주석이있는 이유 인 코드 문자열이 아랍어로 변환되지 않습니까?

답장을 보내 주셔서 감사합니다. Jake. 예, "staticEncodedString"을 디코딩하는 동안 데이터가 느슨합니다.하지만 원하는 것은 모두 다음 문자열을 아랍어로 디코딩하는 것입니다.

NSString * staticEncodedString = @"اÙÙØ­ÙÙ Ùد٠ÙÙÙÙÙÙ٠رÙبÙ٠اÙÙعÙاÙÙÙ ÙÙÙÙ"; 

답변

4

인코딩은 ANSI에서 모든 도구에서 UTF-8로 변경한다고 생각합니다. 예를 들어 메모장 ++를 사용하면 sqlite 또는 ios에서 인코딩 할 수 있습니다.

+0

고맙습니다. AHashmi .... IT WORKED ... !!! VOILAAA .... – Hanny

1

Latin1은 아랍어 문자를 나타내지 않으므로 해당 문자열을 Latin1로 인코딩 할 수 없습니다. 아랍어는 Latin4 문자 집합에 속합니다. 문자열이 무손실로 지정된 인코딩으로 인코딩 될 수없는 경우 cStringUsingEncoding 메서드는 null을 반환합니다.

왜 아랍어 문자열을 LatinX로 인코딩하겠습니까? UTF-8은 표준 문자 만 사용하고 두통이없는 직접적인 접근 방식을 사용하므로 가장 잘 표현할 수 있습니다. Latin4보다 약간 더 많은 바이트가 걸릴 수 있지만, 대부분의 경우 그만한 가치가 있습니다.

Latin1로 변환하면 텍스트가 손실됩니다.

관련 문제