Что это за странные «жулики» в конце моей строки NSString? - PullRequest
0 голосов
/ 02 февраля 2010

У меня есть текстовый файл (songlist.txt), который мое приложение получает с сервера и сохраняет локально.Когда я пытаюсь использовать содержимое файла в моем приложении, я получаю неожиданные результаты.Когда я посмотрел на проблему, я обнаружил, что странные символы иногда появляются в конце содержимого NSString текстового файла.

Почему эти странные персонажи здесь?(Ниже мой источник):

Примеры странных символов в конце строки:

1) I2) верх †3) мул †4) удостоверение личности

// Точное содержимое текстового файла (songlist.txt)

Song One.mp3Песня Два.mp3Песня Три.mp3Песня Four.mp3Песня Five.mp3

//Downloading Songlist from the internet, Saving it to Documents folder
-(void)downloadSongList
{
    NSString *songlistString;

    NSString *URLString_list = @"http://et.bicdoss.com/app/songlist.txt";
    NSURL *URL_list = [NSURL URLWithString:[URLString_list stringByAddingPercentEscapesUsingEncoding:                           NSASCIIStringEncoding]];

    // Get Data of Contents (for Write to Disk)
    NSData *songData = [NSData dataWithContentsOfURL:URL_list];

    if(songData == nil) {

        NSLog(@"SONGLIST.TXT NOT DOWNLOADED");

    }else{

    // Write Songlist.txt to disk
    NSString *filePath = [[self documentsDirectory] stringByAppendingPathComponent:@"Music/songlist.txt"];
    [songData writeToFile:filePath atomically:YES];
       NSLog(@"SONGLIST.TXT DOWNLOADED");
    }

}

// Retrieve songlist.txt from local documents folder
-(NSString*)getLocalSongList
{
NSData *textFileData = [NSData dataWithContentsOfFile:[[self documentsDirectory] stringByAppendingPathComponent:@"Music/songlist.txt"]];
NSString *textFileString = [NSString stringWithUTF8String:[textFileData bytes]];

return textFileString;          
}

//Create NSMutableArray of contents of songlist.txt (seperated by linebreaks)

...
NSMutableArray *files_catalog;
    files_catalog = [[NSMutableArray alloc] init];
    [files_catalog addObjectsFromArray:[[self getLocalSongList] componentsSeparatedByString: @"\n"]];
    [files_catalog retain];

    for(int a = 0; a<[files_catalog count]; a++){
        NSLog(@"Contents of Object %i (files_catalog) %@", a, [files_catalog objectAtIndex:a]);
/*

NOTE:
The above NSLog statement always gives strange output (note strange characters at the end of last filename:)

(output)
2010-02-02 21:22:27.145 SomeApp[19670:207] >>>>>>>>>>>>>>>>>>>> Cntnts of Objct 0 (files_catalog) Song One.mp3
2010-02-02 21:22:27.145 SomeApp[19670:207] >>>>>>>>>>>>>>>>>>>> Cntnts of Objct 1 (files_catalog) Song Two.mp3
2010-02-02 21:22:27.146 SomeApp[19670:207] >>>>>>>>>>>>>>>>>>>> Cntnts of Objct 2 (files_catalog) Song Three.mp3
2010-02-02 21:22:27.146 SomeApp[19670:207] >>>>>>>>>>>>>>>>>>>> Cntnts of Objct 3 (files_catalog) Song Four.mp3
2010-02-02 21:22:27.146 SomeApp[19670:207] >>>>>>>>>>>>>>>>>>>> Cntnts of Objct 4 (files_catalog) Song Five.mp3upp†


Some other examples of strange characters at the end were:

I
upp†
mul†
ID

*/
}

...

1 Ответ

2 голосов
/ 02 февраля 2010

Похоже, что кодирование испортилось при импорте. Попробуйте использовать строкуWithContentsOfFile: encoding: error: method.

[NSString stringWithContentsOfFile:[[self documentsDirectory] stringByAppendingPathComponent:@"Music/songlist.txt"] encoding:NSUTF8StringEncoding error:nil];

Кроме того, он пропускает шаг NSData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...