我想构建一个以逗号分隔的列表,以便稍后可以在逗号上拆分以获取值的数组。但是,值可能包含逗号。实际上,它们中可能有任何正常的键盘字符(它们是由用户提供的)。确定一个你确定不会与价值冲突的角色的好策略是什么?
如果这种语言依赖于语言,我在C#中构建“some character”分隔列表并将其发送到浏览器以在javascript中拆分。
答案 0 :(得分:3)
如果JavaScript正在使用该列表,为什么不以JavaScript数组的形式发送它?它已经有了一种既定且可靠的方法来表示列表和转义字符。
["Value 1", "Value 2", "Escaped \"Quotes\"", "Escaped \\ Backslash"]
答案 1 :(得分:1)
您可以将其拆分为空字符,并使用双重空字符终止列表。
答案 2 :(得分:0)
我总是使用|但如果你仍然认为它可以包含它,你可以使用像@ | @这样的组合。例如:
"string one@|@string two@|@...@|@last string"
答案 3 :(得分:0)
Eric S. Raymond写了一本关于此的书,你可能会发现useful。它面向Unix用户,但仍应适用。
至于你的问题,如果你在单元格中有逗号,那么你需要某种形式的转义。使用\,
是一种标准方法,但您还必须转义斜杠,这也很常见。
或者,使用其他字符,例如竖线(|),制表符或您选择的其他字符。如果用户需要使用电子表格程序处理数据,通常可以在您选择的分隔符上添加过滤规则以拆分单元格。如果这是一个问题,最好选择一个用户可以轻松输入的分隔符,其中包括nul char等。
你也可以使用引用:
"value1", "value2", "etc"
在这种情况下,您只需要转义引号(和斜杠)。在给定正确的过滤器选项的情况下,电子表格也应该接受这一点。
答案 4 :(得分:0)
如果您的字符串中可能出现任何拆分字符,那么我建议您在输出中使用javascript数组定义编写一个脚本元素。例如:
<script>
var myVars=new Array();
myVars[0]="abc|@123$";
myVars[1]="123*456";
myVars[2]="blah|blah";
</script>
您的javascript可以引用该数组
这样做也避免了从C#字符串数组创建逗号分隔字符串的需要。
我能想到的唯一问题是包含引号的字符串,在这种情况下,当你将它们写入myVars输出时,你必须在C#中转义它们。
答案 5 :(得分:0)
有几种方法可以做到这一点。第一种是选择通常不会从键盘输入的分隔符。 NULL或TAB通常都很好。第二种是使用字符序列作为分隔符,Excel CSV文件是一个很好的例子,其中单元格值由带引号分隔单元格的引号定义。
答案取决于您是否要重新发明轮子。
答案 6 :(得分:0)
有一个RFC which documents the CSV format.遵循标准,你将避免重新发明轮子并为下一个人出现并维护你的代码造成混乱。不错的是,有几个库可用于导入/导出CSV,几乎可以用于任何你想象的平台。
也就是说,如果您要将数据序列化以发送到浏览器,那么JSON真的是可行的方式,它也是documented in an RFC,您可以获得几乎任何平台的库,例如JSON.NET