问题描述
|
我想知道如何在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转义反斜杠