web-dev-qa-db-ja.com

NSString-Uni​​codeからASCII同等

UnicodeのNSStringをASCIIのNSStringに変換する必要があります:ĄをAに、ŚをSに、ÓをOに、üをuに、など...

それを行う最も簡単な方法は何ですか?

20
Jacek

-[NSString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]

あなたが与えたすべての例はあなたが望むように扱われます。 ☃のように明らかなアナログのない文字のように見えますが、「?」に移動します。

42
Ken
NSString *unicode = @"Chào mừng đến với Việt Nam.";
NSString *standard = [unicode stringByReplacingOccurrencesOfString:@"đ" withString:@"d"];
standard = [standard stringByReplacingOccurrencesOfString:@"Đ" withString:@"D"];
NSData *decode = [standard dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *ansi = [[NSString alloc] initWithData:decode encoding:NSASCIIStringEncoding];
NSLog(@"ANSI: %@", ansi);
7
Cao Huu Loc

ケンアンサーは「æ」を「ae」に、「ß」を「s」に置き換えますが、合字–、ij、ff、fi、fl、ffi、ffl、ſt、st、..を置き換えません。

改善された解決策は、最初に追加のマッピング行を挿入して、すべてを正常に処理することです。

string = [string stringByReplacingOccurrencesOfString:@"Œ" withString:@"OE"];
string = [string stringByReplacingOccurrencesOfString:@"œ" withString:@"oe"];
string = [string stringByReplacingOccurrencesOfString:@"Đ" withString:@"D"];
string = [string stringByReplacingOccurrencesOfString:@"đ" withString:@"d"];
string = [string precomposedStringWithCompatibilityMapping];

NSData *data = [string dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *newString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
2
Cœur

Objective CのNSASCIIEncodingは127までしかサポートしていません。探している文字セットは、ASCIIテーブルで127を超えています。

NSASCIIStringEncoding厳密な7ビットASCII 8ビット文字内でのエンコード; ASCII値0〜127のみ。MacOSXv10.0以降で使用可能。宣言済み。 NSString.h内。

1
Quasar
NSData *data = [decode dataUsingEncoding:[NSString defaultCStringEncoding]];
decode = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
0
chings228