2013-05-27 4 views
1

Я сохраняю текст на иврите NAMutableArray, тогда я сохранить его NSUserDefalts, таким образом:Сохранение Hebrew текст NSUserDefaults вернуть странное кодирование

numOfWallPosts++; 
     NSString *tempKeyToStore = [NSString stringWithFormat:@"wall_post_%d", numOfWallPosts]; // wall_post_%d 

     NSMutableArray *tempArray = [[NSMutableArray alloc] init]; 

     [tempArray addObject:currentOwner]; 
     [tempArray addObject:currentTitle]; 
     [tempArray addObject:currentText]; 
     [tempArray addObject:currentDate]; 
     [tempArray addObject:currentTime]; 
     [tempArray addObject:currentImageURL]; 
     [tempArray addObject:currentWallID]; 


     [self.sharedPrefs setObject:tempArray forKey:tempKeyToStore]; 
     [self.sharedPrefs synchronize]; 

Когда я хочу, чтобы получить текст на иврите назад я получаю текст как это:

Wall messages: (
    "\U05de\U05e2\U05e8\U05db\U05ea", 
    "\U05ea\U05e8\U05d2\U05d9\U05dc \U05e4\U05d9\U05e7\U05d5\U05d3 \U05d4\U05e2\U05d5\U05e8\U05e3", 
    "\U05d0\U05d6\U05e2\U05e7\U05ea \U05ea\U05e8\U05d2\U05d5\U05dc \U05d1\U05e9\U05e2\U05d4 19:05", 
    "27/05/13", 
    "13:16", 
    "http://blabla......", 
    9 
) 

Я пытался форматировать текст в UTF8String, и с NSUTF8StringEncoding и я до сих пор получить текст таким образом.

Могу ли я сохранить текст надлежащим образом или закодировать его на правильном иврите?

EDIT: Это так странно, хотя текст сохранился странно, я отдернул его, и я правильно понял текст. Но когда я сохраняю их в NSUserDefaults, он показывает мне эту странную кодировку.

NSString *tempKeyToStore = [NSString stringWithFormat:@"wall_post_%d", indexPath.row]; 
    NSMutableArray *tempArray = [[NSMutableArray alloc] init]; 
    NSLog(@"\n\nWall messages: %@", [self.sharedPrefs objectForKey:tempKeyToStore]); 

    tempArray = [self.sharedPrefs objectForKey:tempKeyToStore]; 
    NSString *tempOwner = [tempArray objectAtIndex:0]; 
    NSLog(@"\n\nOWNER: %@", tempOwner); 

ответ

1

Если вы используете NSLog(@"%@", ...) напечатать описание в массиве или словарь, все не-ASCII символов печатаются с использованием контрольной последовательности \Unnnn:

NSArray *a = [NSArray arrayWithObject:@"מערכת"]; 
NSLog(@"%@", a); 

Выход:

 
(
    "\U05de\U05e2\U05e8\U05db\U05ea" 
) 

(Причина заключается в том, что description метод NSArrayNSDictionary и использует формат Old-Style ASCII Property Lists, , который, как следует из названия, позволяет только символы ASCII.)

Если вы печатаете описание строки, правильно отображаются все символы:

NSLog(@"%@", [a objectAtIndex:0]); 

Выход:

 
מערכת 

Так что это только проблема отображения.

+0

, если я хочу правильно отобразить текст в nslog Мне нужно кодировать текст в ascii? –

+0

@IdanMoshe: Я бы просто использовал цикл для NSLog всех записей в массиве. –

1

Попробуйте сделать что-то вроде этого:

NSString *someObject = //your object that needs decode 
     NSString *decodedObject = [NSString 
      stringWithCString:[someObject cStringUsingEncoding:NSUTF8StringEncoding] 
      encoding:NSNonLossyASCIIStringEncoding]; 
     NSLog(@"decodedObject = %@", decodedObject); 

Edit: Там, наверное, что-то неправильно в вашем коде где-то еще, потому что это:

NSMutableArray *tempArray = [[NSMutableArray alloc] init]; 
    [tempArray addObject:@"בדיקה"]; 

    [[NSUserDefaults standardUserDefaults] setObject:tempArray forKey:@"test"]; 
    [[NSUserDefaults standardUserDefaults] synchronize];  
    NSMutableArray *test2=[[NSUserDefaults standardUserDefaults] objectForKey:@"test"];  
    NSLog(@"test2: %@",[test2 objectAtIndex:0]); 

работает отлично.

+0

«Неполное универсальное символьное имя» –

+0

Вам не нужно писать юникод внутри строки. Это должно быть что-то вроде 'NSString * someObject = object;' Я отредактировал решение выше. – Segev

+0

Спасибо за ответ, см. Мое обновленное сообщение. –

0

Ну, можете ли вы опубликовать код, связанный с sharedPrefs?

Когда я попытался сохранить простой иврит в userdefault, он работал отлично.

NSString *tempKeyToStore = @"KEY"; 

NSMutableArray *tempArray = [[NSMutableArray alloc] init]; 

[tempArray addObject:@"שלום שלום"]; 

[[NSUserDefaults standardUserDefaults] setObject:tempArray forKey:tempKeyToStore]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

Читать позже -

// 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

NSMutableArray *tempArray = [defaults objectForKey:@"KEY"]; 

for (NSString* str in tempArray) 
{ 
    NSLog(@"%@", str); 
} 

Надежда я помог ..

+0

Спасибо за ответ, см. Мой обновленный пост. –

+0

Я думаю, что это только проблема с печатью. Ничего общего с nsuserdefaults. –

+0

Попробуйте напечатать простой массив, он будет действовать так же –

Смежные вопросы