修剪后的字符串仅将其长度更改一半



任何人都可以给任何建议。在我的iOS应用程序中,我正在解析XML(在第三方图书馆的帮助下),并且在字符串的开头/结束时遇到了额外的Whitespaces/Newlines问题。初始字符串,返回此第三方图书馆,它是一个C std::wstring,我将其转换为NSString(编码应该是正确的,因为新NSString的内容等于我的XML-File的适当部分)。在修剪长度的"空"元素(仅包含Whitespaces和New Lines)的修剪长度之后,并不为零,而是将其值降低一半。代码在下面....

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这样的输出,从未显示。看起来还有一些新线路,无法检测到的空格。

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字符,打印时用作终结器。

最新更新