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
。
私は以下を読みました:
- https://stackoverflow.com/a/5223737/700926
- https://stackoverflow.com/a/5217703/700926
- https://stackoverflow.com/a/714009/700926
- https://stackoverflow.com/a/668254/700926
- https://stackoverflow.com/a/2039396/700926
NSString
...しかし、それらはすべて、特定の文字を別の文字に置き換える方法を説明しており、NSString
特定のUnicode文字(特に2バイト)を置き換える方法については説明していません。