2013-07-10 5 views
-1

안녕하세요. 일부 데이터를 필요로하는 인터넷에서 파일을 다운로드 할 때 문제가 있습니다. 나는 그것을 열고 버퍼하려고 노력하지만,이 파일이 ... 내 코드 체코이기 때문에 나에게 잘못된 문자를 제공합니다목표 C 읽기 파일이 잘못 인코딩 됨

- (void) sync { 

    NSString * path = @"/Users/syky/Documents/stats.csv"; 
    NSFileHandle * fileHandle = [NSFileHandle fileHandleForReadingAtPath:path]; 
    NSData * buffer = nil; 
    while ((buffer = [fileHandle readDataOfLength:1024])) { 
    //do something with the buffer 

    NSString * s = [[NSString alloc]initWithData:buffer encoding:nil]; 
    NSLog(s); 
    break; 

} 

을 아무리 내가 항상 같은

끊어진 문자를 얻을 선택 인코딩
"Poø.";"Jméno" 

내가 얻을 필요가 :

이 파일은 originaly 등 * .CSV 내보내기 파일 ... 내가하여이 파일을 열려고하면 같은 Microsoft Excel에서에 의해 생성되는
"Příjmení";"Jméno" 

어떤 MAC OS X 텍스트 편집기

당신의 도움을

솔루션을 주셔서 감사합니다 ... 나뿐만 아니라 깨진 문자를 얻을,하지만 난 그게 잘 작동 Microsoft Excel에서와 다른 Windows 기반 MASCHINE에 열 때 :

- (void) sync { 

    NSString * path = @"/Users/syky/Documents/stats.csv"; 
    NSFileHandle * fileHandle = [NSFileHandle fileHandleForReadingAtPath:path]; 
    NSData * buffer = nil; 
    while ((buffer = [fileHandle readDataOfLength:1024])) { 

    NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingWindowsLatin2); 
    NSString *string = [[NSString alloc] initWithData:buffer encoding:encoding]; 

    NSLog(string); 

    break; 

} 
+3

'encoding' 매개 변수에'nil'을 전달하고 있습니까? 정말? – trudyscousin

+1

+ (id) stringWithContentsOfURL : (NSStringEncoding *) url usedEncoding : (NSStringEncoding *) enc 오류 : (NSError **) 오류 –

+0

조금 더 읽을 수 있다면 @trudyscousin : 내가 선택한 인코딩에 상관없이 항상 얻을 수 있습니다. 깨진 숯불 같은 ... nil와 나는 가장 가까운 결과를 얻을 !!! –

답변

2

처음에는 체코 인이 아닙니다. 둘째, "UTF-8 사용"은 "배럴당을 던지십시오"라고 생각합니다. 그것은 같은 방식으로 무거워졌습니다.

내가 조사한 바에 따르면 ISO Latin 2 또는 Apple의 Central European Roman 인코딩을 사용할 수 있습니다. 당신은 전자가 후자를 NSStringEncoding의 사이에 표현,하지만 발견, 그래서 코어 재단의 지원으로 살펴 보겠습니다 : 사용 그렇지 않으면

NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingMacCentralEurRoman); 
NSString *string = [[NSString alloc] initWithData:buffer encoding:encoding]; 

, 당신은 (당신이 말한 것과 아마도 이미이) 수 :

NSString *string = [[NSString alloc] initWithData:buffer encoding:NSISOLatin2StringEncoding]; 

CFStringEncoding 인코딩을 사용하면 상황이 개선되는지 정말 궁금합니다.

편집 : 소스가 마이크로 소프트 엑셀에 의해 생성 된 경우

, 아마도 kCFStringEncodingWindowsLatin2 대신 kCFStringEncodingMacCentralEurRoman의 작동합니다. 이전과 마찬가지로 CFStringConvertEncodingToNSStringEncoding을 사용하여 변환해야합니다.

시도해 볼만한 다른 방법이 있습니다. CFStringRef는 "수신자 다리"NSString에 (그래서 NSData-CFDataRef이다)이기 때문에, 아마 작동 할 핵심 재단에서 완전히 작동 :

CFStringRef stringRef = CFStringCreateFromExternalRepresentation(kCFAllocatorDefault, (CFDataRef)buffer, kCFStringEncodingMacCentralEurRoman); 
NSString *string = (NSString *)stringRef; 

를이 경우, stringRef이 해제되어야한다는 것을 잊지 마세요.

행운을 빕니다.

+0

와우, 효과가 없습니다. 하지만 뭔가 ... "PoÝ."; "Jmťno"내가 예상했던 것과 완전히 다른 것 ... –

+0

@TomasSykora 아, 너트. 아직도 당신의 문제는 관심사이고, 내가 찾을 수있는 다른 것을 볼 것입니다. KOI-8 L2 인코딩은 제 독서에서 언급되었지만 Apple이 지원한다는 것을 알 수는 없습니다. – trudyscousin

+0

파일은 다음 링크에서 액세스 할 수 있습니다. http://www.baseball.cz/modules.php?op=modload&name=liga&file=index&do=statx&akce=219&pda=2&admina=op=modload&name=liga&file=index&pda=2&admina=&akce= xtyp = 0 & xzid = 0 –