我只想使用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# - 在字符串和/或StringBuilder中使用控制字符(\x1f),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30679352/