Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data 如何在sqlite3文本列返回的c字符串中使用换行符?_Core Data_Sqlite_Nsstring_Escaping - Fatal编程技术网

Core data 如何在sqlite3文本列返回的c字符串中使用换行符?

Core data 如何在sqlite3文本列返回的c字符串中使用换行符?,core-data,sqlite,nsstring,escaping,Core Data,Sqlite,Nsstring,Escaping,我想知道如何在sqlite3_column_text返回的c字符串中设置work换行控制字符。例如,这是从查询返回到sqlite数据库的文本: "Lorem ipsum\ndolor sit amet,\nconsectetur\nadipiscing elit." 这是我用来获取它的代码: char *body = (char *)sqlite3_column_text(statement, 1); NSString *str = (body)?[NSString stringWithUTF

我想知道如何在sqlite3_column_text返回的c字符串中设置work换行控制字符。例如,这是从查询返回到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.

使用相同的文本,但从核心数据中的字符串列返回的文本可以正常工作,但我不知道为什么在sqlite3中没有。我希望有人能给出指示,因为这很令人沮丧。

问题是存储在sqllite数据库中的值是两个字符
\n
而不是
换行符本身。在将字符串添加到数据库之前,您必须将
\n
转换为换行符(ASCII 10),或者在Objective-C代码中的SELECT查询之后处理该字符串

有关更多信息,请参见以下答案:

查看SQLite的文档部分,我发现它返回两个字符
\n
而不是
换行符的原因是不支持使用反斜杠字符的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"];

多亏了帖子,我才想到用
\\n
来正确替换最后一个NSString中的
\n
,这样就可以使用其他有效的控制字符了。

谢谢你的回答,真的很有帮助!不客气,雷蒙。考虑投票回答,如果他们帮助你,并接受一个最好回答你的查询。很高兴看到你满意地解决了这个问题。