1

myString次のUTF-8ユニコード文字を含むNSStringインスタンス(これを呼びましょう)があります:(\xc2\x96これは、たとえばMS Wordで見られる長いダッシュです)。

NSLogとフォーマット指定子を使用してNSStringをコンソールに印刷する場合%@、文字は何かが間違っていることを示す逆さまの疑問符に置き換えられます。テーブルセルのテキストとして使用する場合、Unicode文字は単に空白として表示されます(空の文字列ではなく、空白スペース)。

\xc2\x96これを解決するために、 Unicode文字を「通常の」ダッシュに置き換えたいと思います。最初は、これは10秒であると思いました。タスクですが、いくつかの調査の後、私はこれを行うための「正しい方法」をまだ見つけていません。これが私があなたの助けを求めているところです。

私が試したこと:

myStringこのように16進数で印刷するNSLog(@"%x", myString)と、16進数の値が得られます96。Unicode文字を表すUnicode文字の場合\xc2\x96です。

この情報を使用して、次の実装を行い、同等の「通常の」ダッシュに置き換えました。

for(int index = 0; index < [myString length]; index++)
{
    NSLog(@"Hex:'%x' Char:'%c'", [myString characterAtIndex:index],[myString characterAtIndex:index]);

    if([[NSString stringWithFormat:@"%x", [myString characterAtIndex:index]] isEqualToString:@"96"])
        myString = [myString stringByReplacingCharactersInRange:NSMakeRange(index, 1) withString:@"-"];
}

...動作しますが、私の目はそれが気に入らないので、これをもっとクリーンで「正しい」方法で実行できるかどうか知りたいですか?たとえばString.Replace(char,char) 、Unicode文字をサポートするC#のように。

まとめると:

文字列内のUnicode文字を置き換える「正しい方法」を探しています-私はいくつかの調査を行いましたが、明らかに、与えられたものの出現NSStringを別のものに置き換えるために利用できる方法しかありませんNSString

私は以下を読みました:

NSString...しかし、それらはすべて、特定の文字を別の文字に置き換える方法を説明しており、NSString特定のUnicode文字(特に2バイト)を置き換える方法については説明していません。

4

1 に答える 1

1

文字列を変更可能にすることができます(つまり、NSStringの代わりにNSMutableStringを使用します)。また、への呼び出し[[NSString stringWithFormat:@"%x", character] isEqualToString:@"96"]は可能な限り非効率的です-なぜ単純ではないのですif (character == 0x96)か?全体として、試してみてください

NSString *longDash = @"\xc2\x96";
[string replaceOccurrencesOfString:longDash withString:@"-"];
于 2012-09-18T18:23:28.150 に答える