【发布时间】:2022-06-24 13:54:06
【问题描述】:
我遇到了一个问题,tab char 似乎会自动随机转换为空格。
char Delimiter = '\t'; // \t is tab
string headers = $"Column1{Delimiter}Column2{Delimiter}Column3{Delimiter}Column4{Delimiter}Column5{Delimiter}Column6{Delimiter}Column7";
string outputFilePathAndName = "C:/MyOutputFile";
TextWriter writer = new StreamWriter(outputFilePathAndName, append: true);
writer.WriteLine(headers);
writer.Flush();
预期输出:
Column1 Column2 Column3 Column4 Column5 Column6 Column7
实际输出:
Column1 Column2 Column3 Column4 Column5 Column6 Column7
知道为什么前 2 个制表符总是以空格而不是制表符的形式出现吗?
我尝试过的事情:
- 使用字符串连接代替插值
- 粘贴制表符而不是 '\t'
- 用不同的文本编辑器打开输出文件
- 调试时检查字符串
headers,它看起来是正确的。 - 将该行硬编码为
Column1\tColumn2\tColumn3\t...
这是 StreamWriter 的错误吗?
【问题讨论】:
-
@VictorWilson 使用 .NET Core 3.1
-
您使用了与示例中相同的列名?或者至少具有相同长度的列名?如果您只看到不同长度列名的问题,您可能需要重新考虑选项卡的作用。
-
你怎么知道它们是空格?当列长度使得标签仅移动一个空格的宽度时,我曾有人指责标签是一个空格。它仍然是一个制表符,即使该列的长度为 7 个字符并且制表位为 8。如果您正在查看某些文本编辑器,请将制表位大小设置为 100 以查看它们的扩展。如果您正在寻找十六进制编辑器,请检查字符串之间的 0x09(制表符)。空间为 0x20。下载这个:mh-nexus.de/en/hxd,用它打开文件,把整个十六进制编辑器窗口的截图放到你的问题中
-
请将结果文件的内容显示为 HEX 字节,以便我们查看
x20在字符串中的位置。 -
让我很开心的是你的“预期输出”这里有空格;)
标签: c# streamwriter