2012-09-18 43 views
1

我有一個包含以下UTF-8 Unicode字符的NSString實例(我們稱之爲myString):\xc2\x96(即在MS Word中看到的很長的短劃線)。在NSString實例中替換給定unicode字符的正確方法是什麼?

當打印的NSString使用NSLog%@格式說明控制檯,性格是由這表明什麼是錯的倒問號代替 - 使用它作爲文本在表格單元格,Unicode字符時,和只是顯示爲空格(不是空字符串 - 空格)。

爲了解決這個問題,我想用一個「普通」破折號取代\xc2\x96 unicode角色 - 起初我以爲這應該是10秒。任務,但經過一些研究後,我還沒有找到「正確的方法」來做到這一點,這是我希望得到你的幫助的地方。

我曾嘗試:

當我在這樣NSLog(@"%x", myString)我得到的十六進制值十六進制打印myString96爲代表的Unicode字符\xc2\x96 Unicode字符。

使用這個信息,我已經做了以下實施其「正常」衝刺相當於替換:

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:@"-"]; 
} 

...它的工作原理,但我的眼睛不喜歡它,我想要知道這是否能以更清潔和「正確」的方式完成?例如。像C#的String.Replace(char,char)which supports unicode characters

所以包裹起來:

我在尋找「正確的方法」來替換字符串的unicode字符 - 我做了一些研究,但顯然,只有方法可用來替換出現給定NSString與另一個NSString

我已閱讀以下內容:

...但他們都解釋瞭如何用另一個NSString替換給定的NSString,並沒有介紹如何替換特定的Unicode字符(特別是雙字節)。

回答

1

你可以讓你的字符串可變(即使用NSMutableString而不是NSString)。另外,撥打電話[[NSString stringWithFormat:@"%x", character] isEqualToString:@"96"]儘可能低效 - 爲什麼不簡單if (character == 0x96)?總之,試試

NSString *longDash = @"\xc2\x96"; 
[string replaceOccurrencesOfString:longDash withString:@"-"]; 
+0

輝煌 - 謝謝!我是新的Objective-C編程,所以我很高興專業人士願意幫助;) –

+0

不客氣:) – 2012-09-18 18:37:02

相關問題