我的iOS 5.1應用程序,我使用第三方庫,它使用wchar_t
字符串。這在內部工作正常,但我有時需要爲這樣的字符串創建一個NSString
。我可以使用以下API:什麼是iOS wchar_t的排序?
- (id)initWithBytes:(const void *)bytes length:(NSUInteger)length encoding:(NSStringEncoding)encoding
但是我應該使用什麼編碼?由於wchar_t
在iOS的是32位,候選編碼是:
NSUTF32StringEncoding
NSUTF32BigEndianStringEncoding
NSUTF32LittleEndianStringEncoding
我應該哪個字節順序使用?我是否應該使用對應於long NSHostByteOrder()
的結果的編碼字節順序?
順便說一下,哪個字節順序是NSUTF32StringEncoding
代表的?是否要檢查字節並推斷字節順序?當將從 NSString轉換爲getBytes:maxLength:usedLength:encoding:options:range:remainingRange:
時,它會產生什麼?
請注意,我不關心這裏的平臺之間的數據交換(儘管我可能有一天也要面對這個問題)。
谷歌搜索沒有什麼幫助。
我的預感是這是編譯器定義的,例如,什麼編碼使用我的編譯器(鐺),當我寫:
wchar_t *s = L"string with non ascii unicode characters such as éèüçß";
當然它很容易寫的一個小樣本程序,並找到答案,但我想,不依賴於一個解決方案具體實現我的編譯器。
如果您認爲我很困惑,那是因爲我有點。
你正在推翻它。該庫將被編譯爲使用C編譯器的端點。對於大多數情況,NSUTF32StringEncoding應該沒問題。如果您要導出到非iOS主機,則遊戲會發生變化。 – starbolin
在這種情況下,您需要添加一個選項來導出文件。您的導出文件格式應該是big-endian以與網絡字節順序兼容。 – starbolin
@starbolin:'NSUTF32StringEncoding'有問題,它會在'NSString' - >'wchar_t'方向中引發問題。 –