新行命令 (\n) 不适用于 Firebase Firestore 数据库字符串
Posted
技术标签:
【中文标题】新行命令 (\\n) 不适用于 Firebase Firestore 数据库字符串【英文标题】:New Line Command (\n) Not Working With Firebase Firestore Database Strings新行命令 (\n) 不适用于 Firebase Firestore 数据库字符串 【发布时间】:2018-07-23 04:05:12 【问题描述】:我正在使用 Swift 制作应用程序,并且正在使用 Firebase Firestore。 Firestore 是一个数据库,其中包含一些我放入UILabel
的字符串。对于我的一些字符串,我正在使用新行命令(或\n)
。所以我的一些字符串看起来像这样:
"This is line one\nThis is line two\nThis is line three"
但是,每当检索到该字符串时,它都会添加到 UILabel
中,并且看起来像这样......
这是第一行\n这是第二行\n这是第三行
...什么时候应该是这样的...
这是第一行
这是第二行
这是第三行
我假设\n
不适用于来自数据库的字符串?我尝试过使用\\n
进行双重转义。有没有人解决这个问题?
这是我正在使用的代码...
database.collection("songs").whereField("storyTitle", isEqualTo: "This is the story header").getDocuments (snapshot, error) in
for document in (snapshot?.documents)!
self.storyBodyLabel.text = (document.data()["storyBody"] as? String)!
【问题讨论】:
您是否尝试过双重转义(例如\\n
)?
@l'L'l 是的,我有。
Doug 回答:Firebase 数据库不会以任何方式修改您的字符串。如果你存储了一个\n
,当你读回它时它就会在那里。但是,如果这没有转化为您的 UILabel
中的换行符,那么该问题可能会出现在代码的后面。如果您 create an MCVE 提供帮助会容易得多,其中包含 1) 保存字符串,2) 加载字符串,3) 将字符串设置为 UILabel
的 代码。跨度>
@FrankvanPuffelen 好的。刚刚更新了我的问题。该字符串已经在数据库中,所以没有保存过程。
是的,您将文字字符“\n”放在那里。它不像那样工作 - 请参阅我的答案。
【参考方案1】:
我明白了。我只是用换行命令替换了我收到的字符串中的字符“\n”。
label.text = stringRecived.replacingOccurrences(of: "\n", with: "\n")
因为我手动输入了我的字符串并给 Firebase 一个类似
"Line one\nline two\nline three"
我将 "\n" 替换为 "\n" 但是如果你给 Firebase 一个类似的字符串
"Line one
Line two
Line three"
Firebase 将这些返回替换为 "\\n"
然后编写代码
label.text = stringRecived.replacingOccurrences(of: "\\n", with: "\n")
希望有帮助!
【讨论】:
您确定要替换\n吗? Firebase 将 \n 转换为 \\n 因此您需要使用 stringRecived.replacingOccurrences(of: "\\n", with: "\n") 转换回来 Rufat Mirza 有这个问题的正确答案!感谢您的评论 感谢您的回答!现在命令是 stringRecived.replaceAll(RegExp(r'\\n'), '\n')【参考方案2】:Firestore 不支持字符串值中的任何转义序列。如果你在一个字符串中写“\n”,当你阅读它时,你会得到完全正确的结果。如果您需要存储一些特殊的东西,您可能需要自己编码和解码。
【讨论】:
您的意思是“Firebase 实时数据库不支持换行符 [和其他一些字符]”?数据库存储和字符串文字是不同的问题。 不,您可以在 Firestore 中放置您想要的任何字符。我最近什至在里面放了表情符号。您只是不能指望 Firestore 能够理解任何可能在编程语言中有意义的字符转义序列。 twitter.com/CodingDoug/status/961302822997213184 @DougStevenson 对不起。我对编码很陌生。我该怎么做? 这听起来像是在 Stack Overflow 上提出的另一个问题。 @DougStevenson 好的。我去看看有没有人问过。我确定他们有。谢谢你的帮助! ??【参考方案3】:尝试了所有建议的答案,但没有一个对我有用。最后,我在 Firestore 记录中使用 "/n"
修复了它,并在 Swift 客户端中使用了以下内容:
label.text = stringReceived.replacingOccurrences(of: "/n", with: "\n")
【讨论】:
【参考方案4】:您可以为\n 使用 CSS 空白属性,它适用于我。
white-space: pre-line;
【讨论】:
【参考方案5】:解决方案:将其添加到您的字符串中即可完成(对于 Java 用户):
.replace("\\n", "\n")
示例:
if (dataSnapshot.exists())
ArrayList<String> userlogs2 = new ArrayList<String>();
userlogs2.add(dataSnapshot.getValue().toString().replace("\\n", "\n"));
Iterator<String> it2 = userlogs2.iterator();
while (it2.hasNext())
appendColoredText(userlogsmessages2, it2.next() + "\n", Color.BLACK);
appendUnderlinedText(userlogsmessages2,"____________" + "\n\n", Color.parseColor("#DB808080"));
【讨论】:
【参考方案6】:对我来说,firebase 把所有的 \n 都变成了 \\\\n ,所以我只是用 :
扭转了这个变化theString.replaceAll( "\\\\n", "\n" );
刚刚发布是因为我浪费了一些时间来计算正确的“\”数量
【讨论】:
【参考方案7】:Firestore 添加此类型----第一行\n第二行\n第三行
获取 Sting,用 TextView 替换和显示
String sura=modellist.get(position).getSura().replace("\n", "\n");
工作..
【讨论】:
【参考方案8】:我发现我可以使用 String.fromCharCode() 函数将换行符放入 firestore 字段。 Firestore 似乎需要字符串中的特殊字符才能成为实际的字符 ASCII 值,并且不会重新解释转义字符。
即
"第一行" + String.fromCharCode(13) + "第二行"
【讨论】:
【参考方案9】:100% 正常工作
DB.collection(Global.DB_COLLECTION_PATH).document(NEWS_ID).get().addOnCompleteListener(new OnCompleteListener< DocumentSnapshot >()
@Override
public void onComplete(@NonNull Task< DocumentSnapshot > task)
if (task.isSuccessful())
body1 = task.getResult().getString("newsBody").replace("\n", "\n");
nBody.setText(body1);
).addOnFailureListener(new OnFailureListener()
@Override
public void onFailure(@NonNull Exception e)
Log.e("DB FAILED", e.getMessage());
);
希望对你有用
【讨论】:
以上是关于新行命令 (\n) 不适用于 Firebase Firestore 数据库字符串的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 存储上传适用于模拟器,但不适用于 iPhone