当我们出于任何原因想要拆分 sting 时,我们(至少我自己)倾向于使用(竖线)|
字符进行拆分,因为很难找到某人或那个人应用程序在字符串上使用它......但是如果它使用会发生什么?
好吧,一个简单的Crash将被抛出:)
我发现一所大学使用 non-printable字符来做同样的技术,例如:
String.Format(
"{1}{0}{2}{0}{3}{0}{4}",
(char)2,
myFirstString,
mySecondString,
myThirdString,
myFourthString);
当我们想要将孔串提取到它的部分时
String.Split((char)2);
这安全吗? 我应该采用这种安全拆分字符串的方式吗? 还有其他安全技术吗?
最佳答案
它可能比管道“更安全”,因为它更罕见,但这两种方式都不是最佳选择,因为它们将您限制在可能字符串的一个子集中。
考虑使用适当的编码——明确对任意字符串列表进行编码。就编码而言,最简单的可能是简单地序列化一个 string[]
。您可以使用 BinaryFormatter
或 XmlSerializer
或其他东西。
如果结果必须是一个字符串,而且必须是一个短字符串,那么您可以尝试这样的操作:
- 编码:(字符串列表到单个字符串)
- 将每个字符串中的每个
!
替换为!e
并将每个|
替换为!p
。现在,所有字符串都不包含|
,您可以轻松地反转它。 - 使用
|
作为分隔符连接字符串。
- 将每个字符串中的每个
- 解码:(单个字符串返回字符串列表)
- 拆分
|
字符。 - 将每个字符串中的所有
!p
替换为|
并将!e
替换为!
。这将恢复原始字符串。
- 拆分
关于c# - 如何安全地拆分字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3959277/