【问题标题】:C# problem automatically converting tab char to spaceC#问题自动将制表符字符转换为空格
【发布时间】: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


【解决方案1】:

我可以发誓我看到的是空格,但这实际上是一个视觉故障,制表符在视觉上看起来只是空格,即使在像记事本这样的基本文本编辑器中也是如此。我不知道它们显示为不同长度的原因,但我发现确定存在哪些字符的最佳方法是使用 Notepad++ 并选择选项 View >Show symbol >Show white space and tab。当你这样做时,它会显示像箭头一样的选项卡和像点一样的空格。

通常我会删除这样的帖子,因为实际上没有错误,这是我的错误,但我会在这里留下我的答案,因为正如Caius Jard 的评论所证明的那样,其他人有同样的问题,我相信以后会有更多的人有同样的问题。

感谢那些通过他们的 cmets 帮助我理解这一点的人。我只是代表他们发布这个答案,因为没有人发布官方答案。

【讨论】:

    猜你喜欢
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 2013-12-12
    • 2016-08-17
    • 2010-10-02
    • 2014-04-27
    相关资源
    最近更新 更多