2013-04-30 64 views
-1

我有一個iPad應用程序,用戶在文本字段中輸入電話號碼。有時電話號碼是以UTF-16格式輸入的(日語有時候以這種方式輸入他們的電話號碼),但大部分時間以UTF-8格式輸入。將UTF-16編號轉換爲UTF-8?

我的問題是由三部分組成:

  • 有沒有辦法,我可以告訴,如果數字是UTF-8或UTF-16?
  • 如何將UTF-16轉換爲UTF-8,因爲數字是數字?
  • 已經看了,什麼都沒發現,有誰知道這個主題的好論文? (在iOS中來回轉換)。
+2

如果用戶輸入的數量成'UITextField',那麼你有一個'NSString'。用戶如何以不同的編碼輸入此字符串?這沒有任何意義。您可以使用任何您想要的編碼將'NSString'轉換爲'NSData',但用戶在進入文本字段期間無法控制編碼。 – rmaddy 2013-04-30 17:41:13

+0

你是什麼意思「以UTF-16或UTF-8輸入數字」? – 2013-04-30 17:42:44

+0

@MartinR:UTF-16編碼的字節流每個碼點至少使用2個字節,而UTF-8可以低至每個碼點一個字節。 – datenwolf 2013-04-30 17:45:30

回答

1

所有的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

Preferrably使用測試的Unicode庫像ICU。另外libiconv可能對您有用,但請注意許可證。

+0

我相信'libiconv'默認安裝在iOS上,至少有一個iconv.dylib文件在工具鏈的sysroot。另外,正如我所描述的那樣,'NSString'本身不能處理轉換? – 2013-04-30 17:48:05

+0

謝謝大家......這就是我一直在尋找的...... – SpokaneDude 2013-04-30 17:51:07

2

有沒有一種方法可以告訴我的數字是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]; 

已經看了,什麼都沒發現,誰知道這個主題的好論文?

NSString class reference