2011-01-12 8 views
0

私はSQLite DBからサブスクリプトを持つNSStringの表現を保存して取得する必要があるiOSアプリケーションで作業しています。私は定数で、コンパイル時にNSStringのを作成することができます。sqliteからunicodeを読み込んでNSStringを作成する

@は "BR \ u2082_CCl \ u2084" は

\ u2082は2添字、\ u2084のは4添字です。何イムSQLiteのDBに保存することです:

「BR \ u2082_CClの\ u2084」

しかし、私が行う方法を見つけ出すことはできませんどのような、NSStringのにそのバック再変換です。データはdbからchar * "Br \\ u2082_CCl \\ u2084"として返されます。余分なスラッシュを取り除くことは、私の弱い実験では何の違いもありませんでした。 NSStringに戻す方法が必要です - ありがとう!

答えて

0

NSStringstringWithCStringクラスメソッドまたは対応するinitWithCStringインスタンスメソッドのいずれかが必要です。

+0

ありがとうございます!以前は、すべてのstringWithCString:エンコーディングの選択肢と、CFStringCreateWithCStringの賢明な変換の大半を行っていました。私が何かを見逃さない限り、誰もそれを変換しません。私は、コンパイラが@string定数のスラッシュに遭遇したときに何をすべきかを知っていると推測しますが、実行時に/ u項目を変換するような変換はありません。 –

0

私はこのような問題解決 - 明確にするため取り除かエラーチェックを -

Unicode文字列のようなDBから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]; 
} 
関連する問題