这是一个代码示例,可以满足您的需求。我的情况是这样的:我想将日志消息添加到日志文件中,其中每个日志行都以\n
(这就是我的记录器的工作方式)终止。但是 - 我有时需要在日志中包含多行消息,因此它们不能包含 \n - 否则它们会破坏日志文件格式。所以......在这里我用“NSLineSeparatorCharacter”替换所有“换行符”:
NSString *logMessage // multi-paragraph string message containing all kinds of line and paragraph breaks.
NSString *singleParagraphMultiLineMessage =
[[logMessage componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]
componentsJoinedByString:@"\u2028"];
注意:如果你尝试通过它来显示这个字符串description
,它会将 NSLineSeparator 改回\n
例如:如果您尝试使用:
NSString *test = [NSString stringWithFormat:"%@", singleParagraphMultiLineMessage];
NSLog(@"%@", singleParagraphMultiLineMessage);
甚至po singleParagraphMultiLineMessage
在调试器中 -
结果将不再包含 NSLineSeparatorCharacter。仅当您将其导出到 NSData 并保存到文件中 - 或者以UTF8格式提取其内容时- 您会发现它工作正常。我花了一段时间才明白为什么会这样。
为了使答案完整,在Appkit/NSText.h中定义了 NSLineSeparatorCharacter ,它是以下枚举器的一部分,如下所示:
/* Various important Unicode code points */
enum {
NSEnterCharacter = 0x0003,
NSBackspaceCharacter = 0x0008,
NSTabCharacter = 0x0009,
NSNewlineCharacter = 0x000a,
NSFormFeedCharacter = 0x000c,
NSCarriageReturnCharacter = 0x000d,
NSBackTabCharacter = 0x0019,
NSDeleteCharacter = 0x007f,
NSLineSeparatorCharacter = 0x2028, // <-- here it is.
NSParagraphSeparatorCharacter = 0x2029
};
但不是在UIKit/NSText.h中,与它的 MacOS 对应物相比,它是空的。我想知道为什么苹果在这个问题上如此严重地忽视了 iOS 开发人员。也许他们不喜欢 NSText,并希望开发人员不再使用它?仍然 - 欢迎您复制该枚举,并将其粘贴到您的代码中,从而实现 MacOS/iOS 代码兼容性。