我只想使用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/

10-13 08:24
查看更多