私は使用しようとしています
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];
編集:2つの文字タイプのサイズが異なるようです。したがって、次のような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を使用します(長さは文字ではなくバイト単位の文字列の長さです)。