你是如何得到這我不清楚你NSString
或者你有什麼真實目的是試圖解決您的問題。所以這個建議可能完全不合適,但讓我們看看它是否有幫助...
U + 0099是一個未分配的Unicode控制字符,它不是TM符號。如果將轉義符放入文字中,至少要將對象轉換爲,那麼很難將這個字符轉換成一個,否則Cocoa無法將UTF-8中的字節序列轉換爲NSString
(如果它包含它)。這個問題可能是你的評論背後的問題,你無法將其替換爲字符串。
然而開始使用UTF-16,我還是設法在它創建與U + 0099的字符串:
unichar b[] = { 0x61, 0x62, 0x63, 0x99, 0x64, 0x65, 0x66 };
NSString *s = [[NSString alloc] initWithBytes:b length:14 encoding:NSUTF16LittleEndianStringEncoding];
也就是說字符串 「abc \ U0099def」(調用characterAtIndex:3
會告訴你這個)。
使用相同的方法的NSString
只有U + 0099在它可以產生:
和可在一個字符串中使用替換呼叫:
NSString *t = [s stringByReplacingOccurrencesOfString:notTMStr withString:@"™"];
給予t
值根據需要「abc™def」。
警告:我們正在處理未分配的Unicode控制字符。 Clang/Cocoa以UTF-8拒絕它,它可能是無意的,它以UTF-16接受它。使用C庫函數來做到這一點可能更可靠。 Xcode 5.1.1和Clang 5.1被用於測試。
HTH
來源
2015-02-11 18:29:09
CRD
'\ U0099'不是一個有效的Unicode字符。'\ U0099'從哪裏來?爲什麼不使用正確的字符? – rmaddy 2015-02-11 04:02:58
來自客戶端的數據庫。客戶端位於亞洲,所以我假設他們有很多中文數據。 [link](http://www.fileformat.info/info/unicode/char/0099/index.htm)我知道一個事實,你可以在其他語言的輸入法中使用不同的字符。例如「,」和「,」 – timlwting 2015-02-11 04:53:53
Unicode是Unicode而不管語言或語言環境如何。 '\ U2122'是TM符號唯一的Unicode字符。這可能是因爲你的客戶端正在使用一些非Unicode(或非UTF)字符編碼,導致TM符號被編碼爲十六進制值爲'99',但它不會是'\ U0099'。如果你知道數據是什麼編碼,你可以簡單地使用適當的編碼從NSData中創建一個'NSString'。 – rmaddy 2015-02-11 05:00:58