1

Obj-C에서 'e'와 악센트를 결합하려고하는 다음 예제 코드에 설명 된 유니 코드 문자를 작성하는 데 문제가 있습니다.Obj-C : UTF-8 리터럴이 포함 된 유니 코드 문자 조합의 문제

NSLog(@"Composing with Unicode literal: '%@'\nComposing with UTF-8 literal: '%@'", 
     [[NSString stringWithUTF8String:"e\u0301"] 
     precomposedStringWithCanonicalMapping], 
     [[NSString stringWithUTF8String:"e\xc2\xb4"] // "\xc\xb4" is UTF-8 rep of "\u0301" 
     precomposedStringWithCanonicalMapping]); 

출력은 :

Composing with Unicode literal: 'é' 
Composing with UTF-8 literal: 'e´' 

그래서 코드는 UTF-8로 표현 잘못된 결과를 보인다 사용시 급성이 문자 U \로 지정된 경우에만 정확한 결과를 산출한다. 내 질문 : 그럼에도 불구하고 UTF-8을 사용하는 방법이 있습니까?

답변

1

결합 액센트에 대해 잘못된 UTF-8 인코딩이 있습니다.

변경 \xc2\xb4에서 \xcc\x81으로 변경하십시오. 이 변경으로 인해 예상 결과가 나옵니다.

비 결합 악센트로 사용했던 악센트입니다.

0

당신은 결합에 대한 잘못된 악센트를 사용하고 있습니다 :

NSString *utf = [[NSString stringWithUTF8String:"e\xcc\x81"] precomposedStringWithCanonicalMapping]; // "\xc\xb4" is UTF-8 rep of "\u0301" 
NSLog(@"utf: %@",utf); 

출력 :

UTF :

전자 COMBINING ACUTE ACCENT

+0

큰 마음이 비슷하게 생각을 참조하십시오. – rmaddy

+0

그리고 타이밍이 가까워졌습니다. – zaph