Iphone 防止sqlite逃逸反斜杠

Iphone 防止sqlite逃逸反斜杠,iphone,cocoa-touch,sqlite,uitextview,Iphone,Cocoa Touch,Sqlite,Uitextview,我在sqlite数据库中有一个varchar列。特定文本行具有反斜杠,与“\n”一起用于UITextView中的回车符。通过选择从数据库读取值时: myobject.text = [NSString stringWithUTF8String: (char *)sqlite3_column_text(selectstmt, 2)]; 反斜杠被转义,如下所示: "\\n" rather than "\n" 这不能解释为回车。如果在文本中添加两个黑色斜杠,第二个斜杠也将被转义,并最终导致在将tex

我在sqlite数据库中有一个varchar列。特定文本行具有反斜杠,与“\n”一起用于UITextView中的回车符。通过选择从数据库读取值时:

myobject.text = [NSString stringWithUTF8String: (char *)sqlite3_column_text(selectstmt, 2)];
反斜杠被转义,如下所示:

"\\n" rather than "\n"
这不能解释为回车。如果在文本中添加两个黑色斜杠,第二个斜杠也将被转义,并最终导致在将textview添加为子视图时出现异常:

由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:此类不符合密钥测试的密钥值编码。”


有什么方法可以防止这些转义,或者我需要手动清理吗?

反斜杠无疑就在专栏的文本中——你“看到”它是双倍的,因为反斜杠就是这样显示的(以避免与转义序列混淆)。sqlite并没有改变您在查询时放在那里的文本——但可以说,数据库中的文本不是您想要接收的文本


您需要做的是将两个字符的反斜杠-n更改为单字符的换行符,您可以在数据库中(一劳永逸,或在每次查询中)或在objective-C代码中(在每次查询中)根据您的具体需要更改为单字符的换行符。

您所说的“单字符换行符”是什么意思?我明白你对双重反斜杠的看法了。但是,如果我在数据库中获取相同的文本并将其作为测试直接分配给UITextView,它将以回车的形式呈现。从数据库中出来时,将显示文字“\n”,并且不返回回车符。新行是一个字符,ascii 10;它通常以字符串文字形式输入,即反斜杠和n两个字符,即所谓的“转义序列”,而包含换行符的字符串通常将它们显示为转义序列(取决于显示方式)。我想说的是,你可能没有在“数据库中获取相同的文本”——你获取的文本带有换行符,你输入的是转义序列。这可能与两个字符序列最初在数据库中的结果有关,具体取决于您插入它们的方式。我是通过INSERT语句在数据库中手动键入“\n”。然而,我发现只要在我想要回车的文本中点击回车键,当它从DB中出来时,就会执行回车。好!显然,当您键入\n时,没有任何内容将其“解释”为转义序列(同样,也没有任何内容将CR“解释”为其本身以外的任何内容)。那么问题解决了吗?或者在修复数据库中已有的内容时需要帮助吗?例如,如果需要,您可以“手动”将其替换到数据库中。问题肯定已解决。只需按回车键是最简单的情况,也是我所需要的。谢谢