通常のテキストとして適切なエンコードで ' 336 362 340'値でnsStringを表す方法は?
-
28-10-2019 - |
質問
オーディオストリームからタイトルとしてこのような文字列を手に入れました。
Þòà - Ïàäàòü
私はロシア語でこのひもを知っています。そして、私はそれを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およびこのエンコードの一部は、別のエイリアスです。可能なエンコーディングの配列を定義する方が良いよりも。
所属していません StackOverflow