这是我的代码。
std::wstring sourceString = L"test\n newline.";
NSString* transformedString = [NSString stringWithFormat:@"%S", sourceString.c_str()];
我打算将两个字符串的内容相同但是transformedString相当于@“t”。 如何通过最少的编辑来解决这个问题?
(由于unicode问题,我必须使用wstring。)
答案 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
。)