安全ASCII char在存储之前替换空格

时间:2010-06-14 11:48:23

标签: ascii whitespace

我的代码将大量文本数据传递给遗留的lib,后者负责存储它。但是,它往往会删除尾随空格。当我读回数据时,这是一个问题。 由于我无法更改遗留代码,因此我考虑用一些不常见的ASCII字符替换所有空格。当我回读文本时,我可以将它们替换回去。

  1. 考虑到我无法触及旧版存储代码,这是一个坏主意吗?
  2. 我可以使用哪个角色代替?我正在考虑一些超过180的char。
  3. 数据中只有空格 - 没有标签或换行符。 数据是字母数字,带有特殊字符。

7 个答案:

答案 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将空间替换为旧系统。