如何使sqlite3文本列返回的c字符串内的换行符工作?

问题描述

| 我想知道如何在sqlite3_column_text返回的c字符串中使用换行符。例如,这是从查询返回到sqlite数据库的文本:
\"Lorem ipsum\\ndolor sit amet,\\nconsectetur\\nadipiscing elit.\"
这是我用来获取它的代码
char *body = (char *)sqlite3_column_text(statement,1);
Nsstring *str = (body)?[Nsstring stringWithUTF8String:body]:@\"\";
当我尝试打印它时,问题就来了,因为作为回报:
Lorem ipsum\\ndolor sit amet,\\nconsectetur\\nadipiscing elit.
代替:
Lorem ipsum
dolor sit amet,consectetur
adipiscing elit.
使用相同的文本但从Core Data中的字符串列返回的结果按预期工作,但我不知道为什么sqlite3中没有。我希望有人能给出指示,因为这很令人沮丧。     

解决方法

        在SQLite文档的文字值部分中,我发现它之所以返回两个字符
\\n
而不是
newline
的原因是因为不支持使用C样式转义符使用反斜杠字符,因为它们不是标准SQL。所以我通过使用NSString而不是直接使用SQLite尝试了另一种方式:
char *body = (char *)sqlite3_column_text(statement,1);
NSString *str = (body)?[NSString stringWithUTF8String:body]:@\"\";
NSString *container = [str stringByReplacingOccurrencesOfString:@\"\\\\n\"    
                                                     withString:@\"\\n\"];
由于这两篇文章,我得到了在最终的NSString中使用
\\\\n
正确替换
\\n
的想法,因此可以使用其他有效的控制字符。     ,        问题是存储在sqllite DB中的值是两个字符
\\n
,而不是
newline
本身。在将字符串添加到DB之前,您将不得不将4转换为换行符(ASCII 10)字符,或者在Objective-C代码中的SELECT查询之后处理该字符串。 有关更多信息,请参见以下答案: 为iPhone编程时遇到换行符问题 防止sqlite转义反斜杠