Godot/gdscript 个带有数据库转义字符的字符串
Godot/gdscript strings with escape characters from database
我正在用 gdscript 制作一个对话系统,并且正在努力处理转义字符,特别是 '\n'。
我正在使用 CastleDB,虽然它并不完美,但它允许我将几乎所有内容都存储在数据中,并且允许编写游戏的人在引擎之外做所有事情,而无需我复制并粘贴内容。
我遇到了转义字符的绊脚石。 CastleDB 中的单个文本条目不支持 spaces,字符串中的 '\n' 在对话框中打印为 '\n',而不是 space。
我试过将格式字符串函数与 'some text here {space} some more text' 一起使用,其中 space 引用仅包含 \n 的字符串。这仍然打印 \n。如果我将中间带有 \n 的常量字符串直接输入到显示对话框文本的函数中,它会添加一个 space 所以我不太确定这里发生了什么。
我没有计算机科学背景(我已经学过一些 C 语言直到得到指针,那时我决定 return 稍后)。
我在 gdscript 中的字符串是否在后台发生了什么?除了忽略我的转义字符外,它的打印结果就像您期望的字符串一样。
这可能与它以 JSON 形式出现有关吗?据我所知,即使一个字符串被切碎并重新组合,它仍然应该表现得像一个字符串...?!
无论如何,我没有包含任何代码,因为我不知道您需要查看什么代码。我希望这很简单,因为我边走边自学,我只是不知道,但如果有帮助,我可以 post 编码。
谢谢,
詹姆斯
我通过查看 CastleDB 数据在项目 github 页面上的存储方式解决了这个问题。
出于某种原因,“\n”在幕后被存储为“\\n”。既然我知道为什么它会打印得很奇怪,我就可以更改它,即使它感觉像是一个混乱的解决方案!
为了给整个反斜杠业务添加更多的怪异,堆栈溢出将双反斜杠显示为单个反斜杠,所以我必须写 \ \ \n 减去空格得到 \\n...
我敢肯定一定有原因,但我想不通。
转义序列是一种解决语法问题的方法。当您在大多数编程语言中键入字符串时,它以 "
开头并以另一个 "
结尾。它需要保持在一条线上。简单吧?
如果您想在字符串中放入实际的 "
怎么办?还是一条新线路?我们需要某种方式告诉编译器,“嘿,我们想在这里插入一个换行符,即使我们不能使用实际的换行符”。所以我们使用 \
让编译器知道下一个字符是 转义序列 .
的一部分
这会导致另一个问题:如果我们真的想在字符串中加入反斜杠怎么办?这就是双反斜杠的来源:\
是 \
的转义序列,因为 \
本身具有特殊含义。
但是 CastleDB(显然,我不熟悉它)不识别转义序列,所以当您键入 \n
它认为您确实想要 \
后跟 n
.当它将其转换为 JSON 时,它会插入 \
因为 JSON 确实 识别转义序列。
GDScript 也能识别转义序列,所以print("Hello\nworld!")
打印
Hello
world!
您可以尝试 input_string.replace("\n", "\n")
替换 \n
转义序列。
我正在用 gdscript 制作一个对话系统,并且正在努力处理转义字符,特别是 '\n'。
我正在使用 CastleDB,虽然它并不完美,但它允许我将几乎所有内容都存储在数据中,并且允许编写游戏的人在引擎之外做所有事情,而无需我复制并粘贴内容。
我遇到了转义字符的绊脚石。 CastleDB 中的单个文本条目不支持 spaces,字符串中的 '\n' 在对话框中打印为 '\n',而不是 space。
我试过将格式字符串函数与 'some text here {space} some more text' 一起使用,其中 space 引用仅包含 \n 的字符串。这仍然打印 \n。如果我将中间带有 \n 的常量字符串直接输入到显示对话框文本的函数中,它会添加一个 space 所以我不太确定这里发生了什么。
我没有计算机科学背景(我已经学过一些 C 语言直到得到指针,那时我决定 return 稍后)。
我在 gdscript 中的字符串是否在后台发生了什么?除了忽略我的转义字符外,它的打印结果就像您期望的字符串一样。
这可能与它以 JSON 形式出现有关吗?据我所知,即使一个字符串被切碎并重新组合,它仍然应该表现得像一个字符串...?!
无论如何,我没有包含任何代码,因为我不知道您需要查看什么代码。我希望这很简单,因为我边走边自学,我只是不知道,但如果有帮助,我可以 post 编码。
谢谢,
詹姆斯
我通过查看 CastleDB 数据在项目 github 页面上的存储方式解决了这个问题。
出于某种原因,“\n”在幕后被存储为“\\n”。既然我知道为什么它会打印得很奇怪,我就可以更改它,即使它感觉像是一个混乱的解决方案!
为了给整个反斜杠业务添加更多的怪异,堆栈溢出将双反斜杠显示为单个反斜杠,所以我必须写 \ \ \n 减去空格得到 \\n...
我敢肯定一定有原因,但我想不通。
转义序列是一种解决语法问题的方法。当您在大多数编程语言中键入字符串时,它以 "
开头并以另一个 "
结尾。它需要保持在一条线上。简单吧?
如果您想在字符串中放入实际的 "
怎么办?还是一条新线路?我们需要某种方式告诉编译器,“嘿,我们想在这里插入一个换行符,即使我们不能使用实际的换行符”。所以我们使用 \
让编译器知道下一个字符是 转义序列 .
这会导致另一个问题:如果我们真的想在字符串中加入反斜杠怎么办?这就是双反斜杠的来源:\
是 \
的转义序列,因为 \
本身具有特殊含义。
但是 CastleDB(显然,我不熟悉它)不识别转义序列,所以当您键入 \n
它认为您确实想要 \
后跟 n
.当它将其转换为 JSON 时,它会插入 \
因为 JSON 确实 识别转义序列。
GDScript 也能识别转义序列,所以print("Hello\nworld!")
打印
Hello
world!
您可以尝试 input_string.replace("\n", "\n")
替换 \n
转义序列。