gpt4 book ai didi

c# - 将控制字符 (\x1f) 与字符串和/或 StringBuilder 一起使用

转载 作者:行者123 更新时间:2023-11-30 17:43:36 26 4
gpt4 key购买 nike

我只想使用 ASCII 单位分隔符(十进制 31 和十六进制 1F)而不是分隔文件的制表符。我认为问题出在编码上,但我确实找不到如何更改它。在下文中,我在 StreamWriter 文件的第一行输出中在控制台上获得了所需的输出,但第二行缺少“\x1f”。

static StreamWriter sw = null;

static void Main(string[] args)
{
try
{
sw = new StreamWriter(OutFilename, false, Encoding.UTF8);
}
catch (Exception ex)
{
Console.WriteLine("File open error: " + ex.Message);
return;
}
// This works
Output("From▼To"); // Has a '\x1f' in it
// This does not work
StringBuilder sb = new StringBuilder();
sb.Append("From");
sb.Append('\x1f');
sb.Append("To");
Output(sb.ToString());
//
sw.Close();
}

static void Output(string s)
{
Console.WriteLine(s);
sw.WriteLine(s);
}

输出文件有:

From▼To
FromTo

我想使用 StringBuilder 构建一个字符串,除了输出中的 '\x1f'。

最佳答案

这里似乎有很多困惑。让我看看我是否可以稍微清理一下。

首先,让我们就以下易于验证的观点达成一致:

'\x1f' == '\u001F'
'\x1f' == (char)31
'\x1f' != '▼' // <-- here appears to be your mistaken assumption.
'▼' == (char)9660
'▼' == '\u25BC'

所以这个...

// This works
Output("From▼To"); // Has a '\x1f' in it

...具有讽刺意味的是,确切的行不起作用。此字符串中没有 '\x1f'。三角形字符不是 '\x1f'。不确定您是从哪里得到这种印象的。

这将我们引向最后一点:'\x1f' 不是可见字符。所以当你尝试在控制台中显示它时,你将看不到它,这是 100% 正常的。

但是,请放心,当您有一个带有 '\x1f' 的字符串并将其写入文件时,该字符仍然存在。但是你永远无法“看到”它,除非你直接读取字节。

所以是否可以使用 '\x1f' 作为分隔符取决于您是否需要分隔符可见。如果是,那么您需要选择另一个角色。但是,如果您只需要它作为您以编程方式解析文件时的分隔符,那么使用 '\x1f' 是合适的。

关于c# - 将控制字符 (\x1f) 与字符串和/或 StringBuilder 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30679352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com