请有人给一些建议。
在我的iOS应用程序中,我正在解析XML(在第三方库的帮助下),并且在字符串的开头/结尾处有额外的空格/ newLines问题。返回此第三方库的初始字符串,它是我转换为std::wstring
的C ++ NSString
(编码应正确,因为新NSString
的内容等于正确的部分我的XML文件)。在“空”元素(仅包含空格和新行)的修剪长度之后,不会变为零,而是将其值改为一半。
代码如下......
std::wstring val;
NSString *initial = [[NSString alloc] initWithBytes:val.data() length:sizeof (wchar_t)*val.size() encoding:NSUTF16LittleEndianStringEncoding];
NSString *trimmed = [initial stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
如果尝试像NSLog(@"bybyby'%@'bebebe", trimmed);
那样输出bebebe从未显示过。看起来有一些新行,无法检测到的空格。
答案 0 :(得分:2)
wchar_t
是一个32位整数(在iOS和OS X上),因此您必须使用NSUTF32LittleEndianStringEncoding
转换为NSString
。
示例:
std::wstring val (L" Hello World ");
NSString *initial = [[NSString alloc] initWithBytes:val.data() length:sizeof (wchar_t)*val.size() encoding:NSUTF32LittleEndianStringEncoding];
NSString *trimmed = [initial stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"'%@'", trimmed);
// Output: 'Hello World'
您的情况可能发生了什么(NSUTF16LittleEndianStringEncoding
)
是initial
字符串中的每个第二个字符都是NUL字符,
它在印刷时充当终结者。