4

こんにちは私は解決方法がわからないという問題があります。問題は、私がそれについてグーグルする方法さえ知らないということです。私はすでにインターネットで解決策を見つけるのに何時間も費やしましたが、成功しませんでした。状況は次のようになります。

私は文字列を持っています、言いましょう:

NSString *string = @"aąbcčdeęėfghiįjzž";

私の結果は次のようになる必要があります:

NSString *string = @"aabccdeeefghiujzz";

だからあなたが理解しているなら私はこれをしなければなりません:

ąを

čをcに置き換えます

ėをeに置き換えます

ęをeに置き換えます

等々..

多分誰かが私を助けることができますか?私には答えがありますが、それはあまり最適化されていません。もっと便利な解決策を望んでいます。

前もって感謝します!

4

4 に答える 4

11

フレームワークに変換を任せます。

NSString *blah = @"aąbcčdeęėfghiįjzž";
NSData *data = [blah dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *newblah = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"new: %@", newblah);

このログ:

new: aabccdeeefghiijzz
于 2012-05-24T20:17:13.797 に答える
5

これは機能します:

NSString *str = @"aąbcčdeęėfghiįjzž";
NSLog(@"%@", str);
NSMutableString *s = [[str decomposedStringWithCompatibilityMapping] mutableCopy];
NSUInteger pos = 0;
while(pos < s.length) {
    NSRange r = [s rangeOfComposedCharacterSequenceAtIndex:pos];
    if (r.location == NSNotFound) break;
    pos = ++r.location;
    if (r.length == 1) continue;
    r.length--;
    [s deleteCharactersInRange:r];
}
NSLog(@"%@", s);

アイデアは、最初に発音区別符号付きの各文字をその基本文字のシーケンスと発音区別符号を組み合わせたUnicodeのシーケンスに分解し(これはによって行われdecomposedStringWithCompatibilityMappingます)、次に文字列を調べて、そのようなすべてのマークを1つずつ削除します(これがループは行います)。

于 2012-05-24T20:11:47.543 に答える
0

私はこれだけを提供することができます:

[string stringByReplacingOccurrencesOfString:@"ą" withString:@"a"];

等々...

于 2012-05-24T14:10:00.840 に答える
0

Dave DeLongの回答は、「æ」を「ae」に、「ß」を「s」に置き換えますが、合字–、ij、ff、fi、fl、ffi、ffl、ſt、st、..を置き換えません。

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

blah = [blah stringByReplacingOccurrencesOfString:@"Œ" withString:@"OE"];
blah = [blah stringByReplacingOccurrencesOfString:@"œ" withString:@"oe"];
blah = [blah precomposedStringWithCompatibilityMapping];

NSData *data = [blah dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *newblah = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
于 2014-01-16T09:06:59.310 に答える