2012-08-07 71 views
0

iOS的Messages應用程序檢測用戶是否已根據輸入語言鍵入了unicode字符。如果更改爲任何asien語言,則會看到最大字符數寫他的限制爲70而不是160.同時,如果你輸入一個也被編碼爲unicode的笑臉,它只需要2個char值。我的問題是如何檢測將我的最大消息長度限制爲70的unicode字符?檢測鍵入UITextfield的亞洲語言的Unicode字符

回答

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個空格? 從​​

前128個字符(US-ASCII)需要一個字節。接下來的1,920個字符需要兩個字節進行編碼。這涵蓋了幾乎所有拉丁字母的其餘部分,還包括希臘文,西里爾文,科普特文,亞美尼亞文,希伯來文,阿拉伯文,敘利亞文和塔那文字母,以及結合變音符號。剩餘基本多語言平面中的字符需要三個字節(幾乎包含所有常用字符)。 Unicode的其他平面中的字符需要四個字節,其中包括不常見的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); 
+0

是很好的方法,但問題是一些emoojies有長度爲4和2的一些在utf8.I需要檢測麒麟字符不是他長度的數量。 – 2012-08-07 14:15:41

+0

獨角獸的字符:)其中一些有4和2的長度,你不需要長度,但數字的Unicode字符?你什麼意思,你可以給我一些例子嗎? AFAIK表情符號不只是普通文字。但它們以發送者和接收者的身份呈現爲圖標。所以你可以像普通文本一樣使用它們。 – Mert 2012-08-08 08:23:11

+0

問題是我有一個計數器,需要根據unicode字符的類型進行遞增。例如,日文unicode字符將佔用1個空格,表情符號將會是tkae 2.我想要暗示IOS的消息傳遞應用程序的相同行爲。只要它檢測到一個Unicode字符,它將允許的字符數限制爲70.在這個CASE中,我需要單獨處理Unicode字符。如何從nstring中只提取一個Unicode字符?substringWithRange只需要將前半部分unicode – 2012-08-08 11:13:18