我的代码将大量文本数据传递给遗留的lib,后者负责存储它。但是,它往往会删除尾随空格。当我读回数据时,这是一个问题。 由于我无法更改遗留代码,因此我考虑用一些不常见的ASCII字符替换所有空格。当我回读文本时,我可以将它们替换回去。
数据中只有空格 - 没有标签或换行符。 数据是字母数字,带有特殊字符。
答案 0 :(得分:6)
如果您需要保护的只是尾随空格(嵌入空间没问题),那么在每个文本的末尾添加'$'或类似内容。
然后您可以在阅读时将其删除。
如果遗留系统中已有数据,您可能会遇到问题,但您可以读取所有现有数据,以查找从未在任何现有数据的末尾使用的字符(或字符串),并使用标记新字符串(并保护其中的空格)。
答案 1 :(得分:4)
如何对整篇文章使用Base64编码?这样它也可以处理像UTF-8这样的非ASCII字符集。缺点是你将失去一些空间(如果遗留系统对文本长度有限制)。
答案 2 :(得分:2)
您可以使用Tilde(〜)符号。它主要不在文本中出现。如果你想逃避它,你可以使用'\'。
答案 3 :(得分:1)
控制字符怎么样(低于32,CR / LF / TAB / NULL除外)?
答案 4 :(得分:1)
由于你无法改变遗留代码,它本质上是一个黑盒子(即使你以某种方式知道智力上发生了什么)。因此,唯一正确的答案是:尝试使用哪个角色,并使用它。 (如果没有角色可行,问题就不可能了。这就是传统代码糟透的原因。)
答案 5 :(得分:1)
到目前为止,所有答案都提供了解决方案,一旦您提供的文本中已有替换字符,该解决方案就会中断。无论是代字号,控制字符还是$都无关紧要。唯一正确的解决方案是在保存之前对文本进行编码,并在检索时对其进行解码。
如果找到编码空格字符的编码模式,您必须执行的操作。例如,您可以使用URL编码/解码,因为这将对空格字符进行编码。
答案 6 :(得分:0)
您可以使用ASCII 254将空间替换为旧系统。