stringWithFormat 和 %S 问题
这是我的代码。
std::wstring sourceString = L"test\n newline.";
NSString* transformedString = [NSString stringWithFormat:@"%S", sourceString.c_str()];
我想让两个字符串的内容相同,但transformedString相当于@“t”。 我怎样才能用最少的编辑来解决这个问题?
(由于 unicode 问题,我必须使用 wstring。)
Here is my code.
std::wstring sourceString = L"test\n newline.";
NSString* transformedString = [NSString stringWithFormat:@"%S", sourceString.c_str()];
I intended two strings' contents to be same but transformedString is equivalent to @"t".
How can I fix this with minimal edit?
(I have to use wstring because of unicode issue.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在 Mac OS X/iOS 上,
wchar_t
为 32 位宽(即它表示 UTF-32 字符,而不是 UTF-16 字符。)%S
对应于以 null 结尾的字符unichar
数组,而unichar
是 16 位宽,而不是 32 位宽,因此字符't'
出现在NSString 有一个尾随空字符(或 Big Endian 目标上的前导空字符)导致字符串被截断。
要转换为
NSString
,请尝试:请注意,上面假设
wchar_t
包含 UTF-32 值,这在 Mac OS X 和大多数(全部?) * NIX,但在 Windows 上为 false(其中wchar_t
是 16 位,相当于unichar
。)On Mac OS X/iOS,
wchar_t
is 32 bits wide (i.e. it represents UTF-32 characters, not UTF-16 characters.)%S
corresponds to a null-terminatedunichar
array, andunichar
is 16 bits wide, not 32 bits wide, so the character't'
appears toNSString
to have a trailing null character (or leading null character on Big Endian targets) causing the string to be truncated.To convert to an
NSString
, try:Note that the above assumes that
wchar_t
holds a UTF-32 value, which is true on Mac OS X and most (all?) *NIXes, but false on Windows (wherewchar_t
is 16 bits, equivalent tounichar
.)