чтение юникода из sqlite и создание строки NSString - PullRequest
0 голосов
/ 12 января 2011

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

@ "Br \ u2082_CCl \ u2084"

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

"Br \ u2082_CCl \ u2084"

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

Ответы [ 2 ]

0 голосов
/ 19 января 2011

Я решил проблему следующим образом - проверка ошибок удалена для ясности -

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

"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];
}
0 голосов
/ 12 января 2011

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

...