sqlite 新行字符\n无法在textView Android中正确显示

gzszwxb4  于 2023-05-18  发布在  SQLite
关注(0)|答案(6)|浏览(193)

我知道如果你做了

myTextView.setText("This is on first line \n This is on second line");

然后,它将正确显示如下:
这是在第一线
这是在第二线
当我将该字符串存储在数据库中,然后将其设置为视图时,它显示为:
这在第一行\n这在第二行
下面是我用来从数据库中提取字符串的代码行:

factView.setText(factsCursor.getString(MyDBAdapter.FACT_COLUMN));

我只是从一个文本文件填充数据库,其中每一行都是表中的一个新条目,因此一行看起来像这样“This is on first line \n This is on second line”,并且它被存储为文本。
是否存在无法正确显示\n字符的原因?它一定和数据库中的字符串有关。有什么建议吗?

slsn1g29

slsn1g291#

我发现这个问题Austyn Mahoney的答案是正确的,但这里有一点帮助:

private String unescape(String description) {
    return description.replaceAll("\\\\n", "\\\n");
}

description是从SQLite DB中输出的字符串

eeq64g8w

eeq64g8w2#

正如Falmarri在他的评论中所说,当字符串被放入数据库时,它正在被转义。您可以在将字符串放入TextView之前调用String s = unescape(stringFromDatabase)来尝试取消转义字符串。
另外,在将数据插入数据库时,请确保对来自用户或未知可变源的任何类型的数据使用DatabaseUtils.sqlEscapeString()。这将保护您免受错误和SQL Injection的影响。

ccrfmcuu

ccrfmcuu3#

尝试使用\\n而不是\n。如果它抛出一个异常,那么使用newline关键字来代替\n....newline是一个字符,ascii 10;它通常是以字符串文字输入的......并且将服务于您的目的......:)

66bbxpm5

66bbxpm54#

"This is on first line"||x'0A'||"This is on second line"

||连接字符串,x'0A'是未转义的换行符。
如果你插入记录,你必须用"||x'0A'||"替换每一个换行符(如果你的字符串是双引号)。与其他asnswers相比,这可能看起来很笨拙。但是,如果你的行在单独的列中,这也适用于select:

SELECT firstline||x'0A'||secondline FROM wherever;

我发现这一点,而有同样的问题,你是:http://www.mail-archive.com/sqlite-users@sqlite.org/msg43557.html

prdp8dxp

prdp8dxp5#

文本区域可以是多行或单行模式。当它处于单行模式时,换行符'\n'将被视为空格。如果不确定,可以使用以下代码打开多行模式:

setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_MULTI_LINE);

我遇到的问题是,同样的代码在Hive和froyo上不起作用,它们似乎有不同的默认值。我现在也排除了标志,当我想强制一个字段是单行的。
Android doc:
public static final int TYPE_TEXT_FLAG_MULTI_LINE在API级别3中添加
TYPE_CLASS_TEXT的标志:可以将多行文本输入到该字段中。如果未设置此标志,则文本字段将被限制为单行。常数值:131072(0x00020000)
http://developer.android.com/reference/android/text/InputType.html#TYPE_TEXT_FLAG_MULTI_LINE
您必须在填充字段之前设置标志。

kyxcudwk

kyxcudwk6#

把你的阿拉伯语句子放在一个引号里,然后在引号前加上“\n”。这会有用的
例如:<string name="title">\n"خلق الله السموات والأرض"</string>

相关问题