如何检测SUB字符并将其从C#中的文本文件中删除?

时间:2012-08-17 21:07:59

标签: c# string text

我正在编写一个处理特殊文本文件的程序。其中一些文本文件以SUB字符结尾(替换字符。它可能是0x1A。)如何使用C#检测此字符并将其从文本文件中删除?

4 个答案:

答案 0 :(得分:12)

如果二进制数据中确实是0x1A,并且如果您将其作为ASCII或UTF-8文件读取,则在.NET中读取时最终应为U + 001A。所以你可以能够写出类似的内容:

string text = File.ReadAllText("file.txt");
text = text.Replace("\u001a", "");
File.WriteAllText("file.txt", text);

请注意,"\u001a"部分是由单个字符组成的字符串:\uxxxx是单个UTF-16代码点的转义序列,给定的Unicode值以十六进制表示。

答案 1 :(得分:1)

最简单的答案可能是正则表达式:

public static string RemoveAll(this string input, char toRemove)
{
   //produces a pattern like "\x1a+" which will match any occurrence
   //of one or more of the character with that hex value
   var pattern = @"\x" + ((int)toRemove).ToString("x") + "+";

   return Regex.Replace(input, pattern, String.Empty);
}

//usage
var cleanString = dirtyString.RemoveAll((char)0x1a);

是的,你可以传入int,但这需要知道字符的整数值。使用char作为参数允许您指定具有较少muck的文字或char变量。

答案 2 :(得分:1)

C#有一种检测控制字符(包括SUB)的方法。 请参见msdn:https://msdn.microsoft.com/en-us/library/9s05w2k9(v=vs.110).aspx

答案 3 :(得分:0)

您也可以尝试这样的工作

using (FileStream f = File.OpenRead("path\\file")) //Your filename + extension  
{
    using (StreamReader sr = new StreamReader(f)) 
    {
        string text = sr.ReadToEnd();
        text = text.Replace("\u001a", string.Empty);
    }
}