stringWithFormat和%S问题

时间:2011-06-03 09:21:45

标签: iphone nsstring stringwithformat

这是我的代码。

std::wstring sourceString = L"test\n newline.";
NSString* transformedString = [NSString stringWithFormat:@"%S", sourceString.c_str()];

我打算将两个字符串的内容相同但是transformedString相当于@“t”。 如何通过最少的编辑来解决这个问题?

(由于unicode问题,我必须使用wstring。)

1 个答案:

答案 0 :(得分:1)

在Mac OS X / iOS上,wchar_t为32位宽(即它代表UTF-32字符,而不是UTF-16字符。)%S对应于以空值终止的{{1} }数组,unichar是16位宽,而不是32位宽,因此unichar字符't'似乎有一个尾随空字符(或大端目标上的前导空字符)导致字符串被截断。

要转换为NSString,请尝试:

NSString

请注意,上面假设NSString * transformedString = [[NSString alloc] initWithBytes: sourceString.c_str() length: sourceString.size() * sizeof(wchar_t) encoding: NSUTF32StringEncoding]; 包含UTF-32值,在Mac OS X和大多数(全部?)* NIX上都是如此,但在Windows上为{(wchar_t为16时为假)位,相当于wchar_t。)