我知道如果你做了
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字符的原因?它一定和数据库中的字符串有关。有什么建议吗?
6条答案
按热度按时间slsn1g291#
我发现这个问题Austyn Mahoney的答案是正确的,但这里有一点帮助:
description
是从SQLite DB中输出的字符串eeq64g8w2#
正如Falmarri在他的评论中所说,当字符串被放入数据库时,它正在被转义。您可以在将字符串放入
TextView
之前调用String s = unescape(stringFromDatabase)
来尝试取消转义字符串。另外,在将数据插入数据库时,请确保对来自用户或未知可变源的任何类型的数据使用
DatabaseUtils.sqlEscapeString()
。这将保护您免受错误和SQL Injection的影响。ccrfmcuu3#
尝试使用
\\n
而不是\n
。如果它抛出一个异常,那么使用newline关键字来代替\n....newline是一个字符,ascii 10;它通常是以字符串文字输入的......并且将服务于您的目的......:)66bbxpm54#
||
连接字符串,x'0A'
是未转义的换行符。如果你插入记录,你必须用
"||x'0A'||"
替换每一个换行符(如果你的字符串是双引号)。与其他asnswers相比,这可能看起来很笨拙。但是,如果你的行在单独的列中,这也适用于select:我发现这一点,而有同样的问题,你是:http://www.mail-archive.com/sqlite-users@sqlite.org/msg43557.html
prdp8dxp5#
文本区域可以是多行或单行模式。当它处于单行模式时,换行符'\n'将被视为空格。如果不确定,可以使用以下代码打开多行模式:
我遇到的问题是,同样的代码在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
您必须在填充字段之前设置标志。
kyxcudwk6#
把你的阿拉伯语句子放在一个引号里,然后在引号前加上“\n”。这会有用的
例如:
<string name="title">\n"خلق الله السموات والأرض"</string>