我正在尝试使用
NSString *iosString = [[NSString alloc] initWithFormat:@"%ls = %ls" arguments:argListSave];
问题是initWithFormat
不支持%ls
和argListSave
包含wchar_t*
,我怎样才能绕过这个限制?
我正在尝试使用
NSString *iosString = [[NSString alloc] initWithFormat:@"%ls = %ls" arguments:argListSave];
问题是initWithFormat
不支持%ls
和argListSave
包含wchar_t*
,我怎样才能绕过这个限制?
wchar_t *ws1 = va_arg(argListSave, wchar_t *);
wchar_t *ws2 = va_arg(argListSave, wchar_t *);
NSString *s1 = [[NSString alloc] initWithCharacters:ws1 length:wstrlen(ws1)];
NSString *s2 = [[NSString alloc] initWithCharacters:ws2 length:wstrlen(ws2)];
NSString *iosString = [[NSString alloc] initWithFormat:@"%@ = %@", s1, s2];
[s1 release];
[s2 release];
编辑:似乎这两种字符类型的大小不同。因此,您可能希望实现类似 strcpy 的转换函数,如下所示:
unichar *wchar_to_unichar(unichar *result, wchar_t *input)
{
while (*input)
{
*result++ = *input++;
}
return result;
}
编辑2:似乎这仍然不好。正如@Jonathan Grinspan 指出的那样,您还必须考虑 UTF32 代码点并使用
initWithBytes:length:encoding:
在 Intel mac 上使用 NSUTF32LittleEndianStringEncoding,在 PowerPC Mac 上使用 NSUTF32BigEndianStringEncoding(长度是以字节为单位的字符串长度,而不是字符)。