2012-06-10 1 views
2

"\ n"으로 구분 된 여러 줄이있는 파일이 있습니다. 행 중 하나는 다음과 같습니다.NSString stringWithContentsOfFile : 영문자가 아닌 파일 이름

Christian Grundekjøn 

행을 삭제하지 않으면 파일을 읽을 수 없습니다. 내가 선으로 라인을 읽기 위해 다음 코드를 사용

for (NSString *line in [[NSString stringWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:NULL] componentsSeparatedByString:@"\n"]) 

을 내가 줄을 삭제하지 않는 경우, 코드는 아예 for 루프로 가지 않을 것이다. 아무것도 읽히지 않았다. 영어 이외의 문자를 처리하는 방법?

+0

를 읽고 "[: fileName에 인코딩 : NSUTF8StringEncoding 오류 NULL이있는 NSString stringWithContentsOfFile이]"때 내 솔루션이었다 질문 : –

+0

예, 파일이 실제로 UTF-8이 아닌 것처럼 들립니다. – Wevah

답변

2

iOS 내에서 텍스트 파일을 생성하는 경우 NSUTF8StringEncoding을 사용하여 인코딩해야합니다. 그러나 당신이보고하는 문제를 감안할 때, 나는 당신이 다른 소스로부터 데이터를 가져올 수 있고 그 소스가 텍스트를 UTF8로 인코딩하지 않았다고 생각합니다. 이 경우 앱 외부에서 문제를 해결할 수 있지만 소스 파일을 UTF8로 변환 할 수 있습니다.

어떤 인코딩을 사용하는지 알 수없는 경우 (예 : 사용자가 파일을 제공했기 때문에, iOS가 파일을 추측 할 수 있습니다. 내가 성공적으로 사용한 패턴은 먼저 UTF8 인코딩을 사용하여 문자열을 얻으려고 시도하는 것입니다. 많은 경우에

- (NSString*) stringFromFile: (NSString*) filePath; 
{  
    NSError* error = nil; 
    NSString* stringFromFile = [NSString stringWithContentsOfFile: fileName 
                  encoding: NSUTF8StringEncoding 
                  error: &error]; 

    if (stringFromFile) return stringFromFile; // success 

    NSLog(@"String is not UTF8 encoded. Error: %@", [error localizedDescription]); 

    NSStringEncoding encoding = 0; 
    NSError* usedEncodingError = nil; 

    NSString* stringFromFile = [NSString stringWithContentsOfFile: path 
                 usedEncoding: &encoding 
                  error: &usedEncodingError]; 

    if (stringFromFile) 
    { 
     NSLog(@"Retrieved string using an alternative encoding. Encoding was: %d", encoding); 
     return stringFromFile; 
    } 

    // either handle error or attempt further explicit unencodings here 

    return nil; 
} 

이 usedEncoding는 아주 잘 작동 : 어떤 당신이 파일 이름을 전달하는 당신이 방법을 쓰기 가정하면 다음과 같은 문자열 뭔가를 얻을 수 있습니다. 그러나 인코딩을 이해하려고 시도하는 것이 매우 까다로운 경우가 있습니다. 그것은 모두 소스 파일에 따라 다릅니다.

0

파일에서 데이터를 unicode 형식으로 저장하거나 unicode 형식의 특수 문자를 저장할 수도 있습니다.

1

일본어 문자에 문제가있었습니다. 에서 로그하시기 바랍니다 doc 디렉토리에 파일을 저장

NSString *fileData = [NSString stringWithFormat:@"%@", noteContent]; 
BOOL isWriteToFile = [fileData writeToFile:notePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; 

의 결과가 무엇인지 파일 내용

[[NSString alloc] initWithContentsOfFile:fullNotePath usedEncoding:nil error:nil]; 
관련 문제