用C#中的“Unit Separator”(0x1f)替换平面文件中的制表符(“\ t”)

我一直无法找到“单位分隔符”的元字符来替换平面文件中的选项卡。

到目前为止我有这个:

File.WriteAllLines(outputFile, File.ReadLines(inputFile) .Select(t => t.Replace("\t", "\0x1f"))); //this does not work 

我也尝试过:

 File.WriteAllLines(outputFile, File.ReadLines(inputFile) .Select(t => t.Replace("\t", "\u"))); //also doesn't work 

 File.WriteAllLines(outputFile, File.ReadLines(inputFile) .Select(t => t.Replace("\t", 0x1f))); //also doesn't work 

如何正确使用hex作为参数? 另外,“单位分隔符”的元字符是什么?

单位分隔符的元字符是

 U+001f 

你应该可以像使用它一样

 File.WriteAllLines(outputFile, File.ReadLines(inputFile) .Select(t => t.Replace("\t", "\u001f"))); 

编辑:由于关于控制角色的讨论开始发生,我为了后人的缘故添加了这个定义。

一种特殊的非打印字符,用于开始,修改或结束function,事件,操作或控制操作。 ASCII字符集定义了32个控制字符。 最初,这些代码旨在控制电传打字机。 然而,现在它们通常用于控制显示监视器,打印机和其他现代设备。

从这里 。

另外,这里是单位分隔符的描述

要存储在数据库中的最小数据项在ASCII定义中称为单元。 我们现在称他们为田地。 单元分隔符在串行数据存储环境中分隔这些字段。 大多数当前的数据库实现要求大多数类型的字段具有固定长度。 记录中有足够的空间来存储每个字段的最大可能成员,即使在大多数情况下不需要这样做。 在许多情况下,这会花费大量空间。 美国控制代码允许所有字段具有可变长度。 如果数据存储空间有限 – 就像六十年代那样 – 这是保护宝贵空间的好方法。 另一方面,串行存储远远低于现代表驱动RAM和磁盘实现的效率。 我无法想象现代SQL数据库使用存储在纸带或磁性卷轴上的数据运行的情况……

从这里 。

这应该可以让你到达你需要的地方:

  char unitSeperatorChar = (char)Convert.ToInt32("0x1f", 16); string contents = File.ReadAllText(inputFile); string convertedContents = contents.Replace('\t', unitSeperatorChar); File.WriteAllText(outputFile, convertedContents); 

我加载到一个字符串,转换,并重新保存。 您可以将它们组合在一起,以便在字符串管理中提

我认为在C#中编码unicode字符的正确方法是使用\unnnn格式。 您可以尝试使用字符串\u001f替换它,如下所示:

 File.WriteAllLines(outputFile, File.ReadLines(inputFile) .Select(t => t.Replace("\t", "\001f"))); 

那样有用吗?