通常のテキストとして適切なエンコードで ' 336 362 340'値でnsStringを表す方法は?

StackOverflow https://stackoverflow.com/questions/9369603

質問

オーディオストリームからタイトルとしてこのような文字列を手に入れました。

Þòà - Ïàäàòü

私はロシア語でこのひもを知っています。そして、私はそれをuilabelで正しく見せる必要があります。私はこれを試しています:

NSData *data = [value dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

goodValue 次の値が含まれています:

\336\362\340 - \317\340\344\340\362\374

オリジナルでセーブが表示されているように、文字の数。しかし、uilabelでテキストとして使用するために、どのように通常の文字列に変換する必要がありますか?

前もって感謝します。

役に立ちましたか?

解決

すべての可能な組み合わせを反復してログに記録するためのコードをいくつか書きました。

最初は、nsstring.hで考えられるすべてのエンコーディングのリストを見つけ、可能なエンコーディングの配列に設定します。

 int encodings[] = {
    NSASCIIStringEncoding,
    NSNEXTSTEPStringEncoding,
    NSJapaneseEUCStringEncoding,
    NSUTF8StringEncoding,
    NSISOLatin1StringEncoding,
    NSSymbolStringEncoding,
    NSNonLossyASCIIStringEncoding,
    NSShiftJISStringEncoding,
    NSISOLatin2StringEncoding,
    NSUnicodeStringEncoding,
    NSWindowsCP1251StringEncoding,
    NSWindowsCP1252StringEncoding,
    NSWindowsCP1253StringEncoding,
    NSWindowsCP1254StringEncoding,
    NSWindowsCP1250StringEncoding,
    NSISO2022JPStringEncoding,
    NSMacOSRomanStringEncoding,
    NSUTF16StringEncoding,
    NSUTF16BigEndianStringEncoding,
    NSUTF16LittleEndianStringEncoding,
    NSUTF32StringEncoding,
    NSUTF32BigEndianStringEncoding,
    NSUTF32LittleEndianStringEncoding
};

そして、ここで繰り返して、考えられるすべての結果を表示しましょう。

int numberOfEncodings = 23;

for (int i = 0; i < numberOfEncodings; i++) {
    NSLog(@"=============== %d =============", encodings[i]);
    constchar *asd = [value cStringUsingEncoding:encodings[i]];
    if (asd == NULL) {
        NSLog(@"asd == NULL");
    } else {
        for (int j = 0; j < numberOfEncodings; j++) {
            NSString *str = [NSStringstringWithCString:asd encoding:encodings[j]];
            NSLog(@"%d: %@", encodings[j], str);
        }
    }
}

その後、私は結果を調べて、良い文字列を見つけました。それはすべて=)

注:すべてのエンコーディングは、nsStringencoding enumの値です。また、エンコーディング[]配列を定義する代わりに、0からエンコーディングの数に反復することができると考えることができます。ただし、エンコード値はINTを上昇していないため、これを行うべきではありません。たとえば、NSMACOSROMANSTRINGENCODING = 30およびこのエンコードの一部は、別のエイリアスです。可能なエンコーディングの配列を定義する方が良いよりも。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top