微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Godot/gdscript 字符串与数据库中的转义字符

如何解决Godot/gdscript 字符串与数据库中的转义字符

我正在用 gdscript 制作一个对话系统,并且正在努力处理转义字符,特别是 '\n'。

我正在使用 CastleDB,虽然它并不完美,但它允许我将几乎所有内容都存储在数据中,并允许为游戏编写代码的人在引擎之外完成所有工作,而无需我进行复制和粘贴东西进来。

我遇到了转义字符的绊脚石。 CastleDB 中的单个文本条目不支持空格,并且字符串中的 '\n' 在对话框中打印为 '\n',而不是空格。

我尝试过使用格式字符串函数和'some text here {space} some more text',空格引用一个仅由\n组成的字符串。这仍然打印\n。如果我将一些中间带有 \n 的常量字符串直接输入到显示对话框文本的函数中,它会添加一个空格,所以我不确定这里发生了什么。

我没有计算机科学背景(我已经做了一些 C 直到指针,此时我决定稍后返回)。

我在 gdscript 中的字符串在后台发生了什么吗?除了忽略我的转义字符外,它会像您期望的字符串一样打印出来。

这可能与它以 JSON 形式出现的事实有关吗?据我所知,即使字符串被切碎并重新组装,它仍然应该像字符串一样......?!

无论如何,我没有包含任何代码,因为我不知道您需要查看什么代码。我希望这是一些简单的事情,因为我正在自学,我只是不知道,但如果有帮助,可以发布代码

谢谢,

詹姆斯

解决方法

我通过查看 CastleDB 数据在项目的 github 页面上的存储方式解决了这个问题。

出于某种原因,“\n”在幕后存储为“\\n”。现在我知道它为什么打印怪异了,我可以改变它,即使它感觉像一个凌乱的解决方案!

为了给整个反斜杠业务添加更多奇怪的东西,堆栈溢出将双反斜杠显示为单个反斜杠,所以我必须写 \ \ \n 减去空格以获得 \\n...

我确定一定有原因,但我无法理解。

,

转义序列是一种解决语法问题的方法。当您在大多数编程语言中键入字符串时,它以 " 开头并以另一个 " 结尾。它需要保持在一条线上。很简单吧?

如果您想在字符串中放入一个实际的 " 怎么办?还是新线路?我们需要某种方式告诉编译器,“嘿,我们想在这里插入一个换行符,即使我们不能使用实际的换行符”。所以我们使用 \ 让编译器知道下一个字符是转义序列的一部分。

这会导致另一个问题:如果我们真的想在字符串中放置一个反斜杠怎么办?这就是双反斜杠的来源:\\\ 的转义序列,因为 \ 本身具有特殊含义。

但是 CastleDB(显然,我不熟悉它)无法识别转义序列,因此当您键入 \n 时,它认为您确实想要 \ 后跟 n。将其转换为 JSON 时,它会插入 \\,因为 JSON 确实识别转义序列。

GDScript 也能识别转义序列,所以 print("Hello\nworld!") 打印

Hello
world!

您可以尝试用 input_string.replace("\\n","\n") 替换 \n 转义序列。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。