我有一個iPad應用程序,用戶在文本字段中輸入電話號碼。有時電話號碼是以UTF-16格式輸入的(日語有時候以這種方式輸入他們的電話號碼),但大部分時間以UTF-8格式輸入。將UTF-16編號轉換爲UTF-8?
我的問題是由三部分組成:
- 有沒有辦法,我可以告訴,如果數字是UTF-8或UTF-16?
- 如何將UTF-16轉換爲UTF-8,因爲數字是數字?
- 已經看了,什麼都沒發現,有誰知道這個主題的好論文? (在iOS中來回轉換)。
我有一個iPad應用程序,用戶在文本字段中輸入電話號碼。有時電話號碼是以UTF-16格式輸入的(日語有時候以這種方式輸入他們的電話號碼),但大部分時間以UTF-8格式輸入。將UTF-16編號轉換爲UTF-8?
我的問題是由三部分組成:
所有的Unicode編碼都可以在沒有問題的情況下進行轉換。 UTF-8是與UTF-16相同的編碼。東亞用戶使用UTF-16的主要原因是比UTF-8更頻繁地使用UTF-16編碼東亞Unicode平面的代碼點。
Unicode編碼之間的轉換或多或少很簡單:Unicode爲每個字符分配一個編碼點。碼點以編碼特定的方式編碼爲字節流。因此,您必須將UTF-16字節流解碼爲單個Unicode碼位,然後將其轉換爲UTF-8編碼的字節流。
有沒有一種方法可以告訴我的數字是UTF-8還是UTF-16?
這不是你要找的。你想知道字符串的編碼。
如何從UTF-16轉換爲UTF-8
我相信'libiconv'默認安裝在iOS上,至少有一個iconv.dylib文件在工具鏈的sysroot。另外,正如我所描述的那樣,'NSString'本身不能處理轉換? – 2013-04-30 17:48:05
謝謝大家......這就是我一直在尋找的...... – SpokaneDude 2013-04-30 17:51:07
有沒有一種方法可以告訴我的數字是UTF-8還是UTF-16?
No. NSString
不公開此實施細節。而你不應該需要它。 (如果是這樣,那很可能是設計錯誤。)
如何將UTF-16轉換爲UTF-8,因爲數字是數字?
(數字是數字,還是我失去了一些東西?)嗯,你可以使用NSString
作爲一種「橋」(字符數組)不同編碼的C字符串之間進行轉換:
unichar utf16_string[] = // some UTF-16 C string
NSString *tmp = [[NSString alloc] initWithBytes:utf16_string
length:sizeof(utf16_string)/sizeof(utf16_string[0])
encoding:NSUTF16StringEncoding
];
const char *utf8_string = [tmp UTF8String];
已經看了,什麼都沒發現,誰知道這個主題的好論文?
如果用戶輸入的數量成'UITextField',那麼你有一個'NSString'。用戶如何以不同的編碼輸入此字符串?這沒有任何意義。您可以使用任何您想要的編碼將'NSString'轉換爲'NSData',但用戶在進入文本字段期間無法控制編碼。 – rmaddy 2013-04-30 17:41:13
你是什麼意思「以UTF-16或UTF-8輸入數字」? – 2013-04-30 17:42:44
@MartinR:UTF-16編碼的字節流每個碼點至少使用2個字節,而UTF-8可以低至每個碼點一個字節。 – datenwolf 2013-04-30 17:45:30