出于编码原因,这会让您感到恐惧(我很难说),我需要在单个字符串中存储多个文本项。

我将使用一个字符来分隔它们。

哪个字符最适合用于此目的,即哪个字符最不可能出现在文本中?必须可打印,并且可能小于 ASCII 的 128,以避免区域设置问题。

有帮助吗?

解决方案

假设你不能使用CSV我说去与数据的一些令人尴尬的原因。取一些样本数据,并为每个值0-127做一个简单的字符数。选择这不会发生的一个。如果有太多的选择,获得更大的数据集。它不会花费太多的时间来写,你会得到最好的答案给你。

答案将是不同的问题域不同,所以| (管)是在shell脚本中常见的,^是数学公式常见,同样可能对大多数其它字符也是如此。

我个人认为我会去| (管)如果给一个选择,但与真正的数据会是最安全的。

不管你做什么,要确保你已经制定了一个逃跑计划!

其他提示

大概|或^或〜你也可以将两个字符

我会选择 “单元分隔符” 的ASCII码 “US”:ASCII 31(0x1F的)

在过去,过去,大部分东西都连续进行的,没有随机访问。这意味着几个控制代码被嵌入到ASCII。

ASCII 28 (0x1C) File Separator - Used to indicate separation between files on a data input stream.
ASCII 29 (0x1D) Group Separator - Used to indicate separation between tables on a data input stream (called groups back then).
ASCII 30 (0x1E) Record Separator - Used to indicate separation between records within a table (within a group).  These roughly map to a tuple in modern nomenclature.
ASCII 31 (0x1F) Unit Separator - Used to indicate separation between units within a record.  The roughly map to fields in modern nomenclature.

单位分离器是ASCII,并且有用于显示它支持Unicode(典型的是在“我们”相同的字形),但许多字体不显示它。

如果你必须显示的话,我会建议在应用中显示出来,它被解析成田后。

当使用不同的语言,该符号:¬

被证明是最好的。但是我仍在测试。

你怎么样用一个CSV样式的格式?角色可以在一个标准的CSV格式进行转义,而且已经有很多已经写好。解析器

您说“可印刷”,但其可以包括字符,例如一个标签(0×09)或进料形式(0x0c)。我几乎总是选择制表符,而不是逗号分隔的文件,因为逗号有时会出现在文本。

(有趣的是所述 ASCII表具有字符GS(0x1D),RS(0X1E),和美国(0x1F的),用于组,记录和单元分隔符,任何那些是/是)。

如果按“打印”你的意思是一个字符,用户可以识别并轻松地输入时,我会去管|符号第一,与其他一些奇怪的字符(@~^\,或反引号我似乎不能在此处输入)作为一种可能性。这些+=!$%&*()-'":;<>,.?/看起来他们的字符将更有可能在用户输入发生。至于下划线_和哈希#{}[]我不知道括号。

可以使用管道符号?这通常用逗号或制表符分隔字符串之后的下一个最常用的分隔符。这是不太可能的大多数文本将包含一个管道,和ord(“|”)。返回124对我来说,这样似乎适合您的要求。

有关快速逸出我使用这样的东西: 说你要concatinate STR1,STR2和STR3 我做的是:

delimitedStr=str1.Replace("@","@a").Replace("|","@p")+"|"+str2.Replace("@","@a").Replace("|","@p")+"|"+str3.Replace("@","@a").Replace("|","@p");

然后检索原始用途:

splitStr=delimitedStr.Split("|".ToCharArray());
str1=splitStr[0].Replace("@p","|").Replace("@a","@");
str2=splitStr[1].Replace("@p","|").Replace("@a","@");
str3=splitStr[2].Replace("@p","|").Replace("@a","@");

请注意:的替换的顺序是重要的

其牢不可破且易于实现

管为赢! |

我们使用ASCII 0x7F的是伪打印和在正常使用很少出现。

这可以根据不同的情况和语言的好坏(通常是坏),但保持头脑记住,你可以随时进行Base64编码,整个事情。然后,您不必担心逃逸,每边进行反向转义各种图案,并且可以根据未在您的Base64编码字符集使用的字符只是独立和分割字符串。

我曾当面对将XML文档转换成XML属性/节点求助于该溶液中。属性不能在他们CDATA块在所有,节点转义为CDATA显然不能具有内部进一步CDATA块而不断裂的结构。

CSV可能是大多数情况下一个更好的主意,虽然。

那么这将取决于你的文字在一定程度上,但竖线的性质0x7C没有文字经常出现。

我不认为我见过的符号,然后在自然文本逗号,但你可以先检查一下文件,看它是否包含分隔符,如果是这样,使用替代。如果你想随时都可以知道你使用的分隔符不会造成冲突,然后做一个循环检查你想要的分隔符的文件,如果存在的话,然后双击该字符串,直到该文件不再有比赛。这不要紧,如果还有类似的字符串,因为你的程序将只寻找精确匹配的分隔符。

这两个管和尖是显而易见的选择。我想指出,如果用户想输入整个响应,插入符号是比较容易的任何键盘上找到比为管。

我不确定你是否需要使用 ASCII,但如果你能够用 UTF-8 对其进行编码,你可以找到一个非常晦涩的符号,例如: (U+2561) - 我在我的程序中经常使用它。

您还可以研究对象序列化,并为您可能需要的所有元素创建新字段。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top