"MgBr \ u2082_CH \ u2082Cl \ u2082"

отаю над приложением для iOS, где мне нужно хранить и извлекать данные из базы данных SQLite, представляющей строку NSString с подписками. Я могу создать NSString во время компиляции с константой:

@ "Br \ u2082_CCl \ u2084"

\ u2082 - это 2 индекса, \ u2084 - это 4 индекса. Что хранится в базе данных SQLite:

"Br \ u2082_CCl \ u2084"

Но что я не могу понять, как это сделать, так это преобразовать его обратно в строку NSString. Данные возвращаются из БД в виде символа * "Br \\ u2082_CCl \\ u2084" Удаление лишнего слэша не имело никакого значения в моих слабых экспериментах. Мне нужен способ вернуть это в NSString - Спасибо!

Ответы на вопрос(2)

NSString stringWithCString методы класса или соответствующиеinitWithCString методы экземпляра.

 Chris Walken12 янв. 2011 г., 14:52
Спасибо! Ранее я просмотрел все варианты кодировки stringWithCString: а также большинство разумных преобразований в CFStringCreateWithCString. Если я что-то не пропустил, никто из них не превратит это. Я предполагаю, что компилятор знает, что делать, когда он встречает косую черту в константе @string, но ни одно из преобразований, похоже, не изменяет элементы / u во время выполнения.

ти -

строка Юникода входит в параметр stringEncoded из БД, например:

"MgBr \ u2082_CH \ u2082Cl \ u2082"

+(NSString *)decodeUnicodeBytes:(char *)stringEncoded {
  unsigned int    unicodeValue;
  char            *p, buff[5];
  NSMutableString *theString;
  NSString        *hexString;
  NSScanner       *pScanner;

  theString = [[[NSMutableString alloc] init] autorelease];
  p = stringEncoded;

  buff[4] = 0x00;
  while (*p != 0x00) {

    if (*p == '\\') {
      p++;
      if (*p == 'u') {
        memmove(buff, ++p, 4);

        hexString = [NSString stringWithUTF8String:buff];
        pScanner = [NSScanner scannerWithString: hexString];
        [pScanner scanHexInt: &unicodeValue];

        [theString appendFormat:@"%C", unicodeValue];
        p += 4;
        continue;
        }
      }

    [theString appendFormat:@"%c", *p];
    p++;
    }

  return [NSString stringWithString:theString];
}

Ваш ответ на вопрос