【发布时间】:2012-05-30 12:15:30
【问题描述】:
我是我的 iOS 5.1 应用程序,我使用第 3 方库,它使用 wchar_t 作为字符串。这在内部工作正常,但我有时需要为这样的字符串创建一个NSString。我可以使用以下 API:
- (id)initWithBytes:(const void *)bytes length:(NSUInteger)length encoding:(NSStringEncoding)encoding
但是我应该使用什么编码?由于 iOS 中的wchar_t 是 32 位,因此候选编码为:
NSUTF32StringEncoding
NSUTF32BigEndianStringEncoding
NSUTF32LittleEndianStringEncoding
我应该使用哪个字节顺序?我应该使用long NSHostByteOrder()的结果对应的编码字节顺序吗?
顺便问一下,NSUTF32StringEncoding 代表的是哪个字节顺序?它会检查字节并推断字节顺序吗?将 from NSString 转换为 getBytes:maxLength:usedLength:encoding:options:range:remainingRange: 会产生什么结果?
请注意,这里我并不关心平台之间的数据交换(尽管我可能有一天也不得不面对这个问题)。
谷歌搜索并没有多大帮助。
我的直觉是这是编译器定义的,例如当我编写时,我的编译器(CLang)使用什么编码:
wchar_t *s = L"string with non ascii unicode characters such as éèüçß";
当然,编写一个小示例程序并找出答案很容易,但我想要一个不依赖于我的编译器的具体实现的解决方案。
如果你认为我很困惑,那是因为我有点。
【问题讨论】:
-
你想多了。该库将被编译以使用 C 编译器的终结性。 NSUTF32StringEncoding 对于大多数事情都应该没问题。如果您要导出到非 iOS 主机,游戏会发生变化。
-
在这种情况下,您需要添加一个选项来导出文件。您的导出文件格式应该是 big-endian 以与网络字节顺序兼容。
-
@starbolin:
NSUTF32StringEncoding有问题,尤其会在NSString->wchar_t方向造成问题。
标签: ios string cocoa unicode character-encoding