iOS のメッセージ アプリは、ユーザーが入力言語に応じて Unicode 文字を入力したかどうかを検出します。アジア言語のいずれかに変更すると、文字の最大数が 160 ではなく 70 に制限されていることがわかります。 Unicode としてもエンコードされているスマイリーを入力すると、2 文字の値しか取りません。私の問題は、メッセージの最大長を 70 に制限するユニコード文字を検出する方法です。
1 に答える
キーボードの現在の言語を検出するには、ここを参照してください Detecting unicode chars of asian languages typed to UITextfield
動的計算では、文字列を nsdata に変換してサイズを探すとうまくいくはずです。
NSLog(@"%i", [@"a" dataUsingEncoding:NSUTF8StringEncoding].length);
私に1を与える
NSLog(@"%i", [@"aa" dataUsingEncoding:NSUTF8StringEncoding].length);
私に2を与える
NSLog(@"%i", [@"aö" dataUsingEncoding:NSUTF8StringEncoding].length);
私に3を与える
NSLog(@"%i", [@"草" dataUsingEncoding:NSUTF8StringEncoding].length);
私に3を与える
編集:
スペースを1つ取るとはどういう意味ですか? http://en.wikipedia.org/wiki/UTF-8より
最初の 128 文字 (US-ASCII) には 1 バイトが必要です。次の 1,920 文字のエンコードには 2 バイトが必要です。これは、ほとんどすべてのラテン語由来のアルファベットの残りをカバーし、ギリシャ語、キリル語、コプト語、アルメニア語、ヘブライ語、アラビア語、シリア語、ターナ語のアルファベット、および発音区別記号の組み合わせもカバーしています。Basic Multilingual Plane の残りの文字には 3 バイトが必要です (これには、一般的に使用される事実上すべての文字が含まれます)。Unicode の他のプレーンの文字には 4 バイトが必要です。これらの文字には、あまり一般的でない CJK 文字や、さまざまな歴史的なスクリプトや数学記号が含まれます。
特定の Unicode セットからの文字が含まれている場合は、このように文字列を確認できます
NSRange 範囲 = NSMakeRange(256, range.length -1);
NSLog(@"%i", [@"ı" rangeOfCharacterFromSet:[NSCharacterSet
characterSetWithRange:range]].location == NSNotFound);
NSLog(@"%i", [@"ö" rangeOfCharacterFromSet:[NSCharacterSet
characterSetWithRange:range]].location == NSNotFound);
NSLog(@"%i", [@"ab" rangeOfCharacterFromSet:[NSCharacterSet
characterSetWithRange:range]].location == NSNotFound);