【发布时间】:2014-02-19 11:51:02
【问题描述】:
我有一个 ASCII 扩展的 txt 文件,我需要将其转换为字节数组。 问题是 Null 字符和空格被解码为相同的 0x20 值。 我如何区分这些情况?该文件由串行记录器硬件创建,它将串行端口上交换的字节保存在 ASCII 扩展 txt 文件中。 这是控制台应用程序代码:
class Program
{
static void Main(string[] args)
{
Encoding enc = Encoding.GetEncoding(1252);
byte[] byteArray;
string filePath = "C:\\Log.txt";
if (File.Exists(filePath))
{
StreamReader sr = new StreamReader(filePath, enc);
string fileString = sr.ReadToEnd();
if (fileString.Length > 0)
{
byteArray = enc.GetBytes(fileString);
for (int i = 0; i < fileString.Length; i++)
{
Console.WriteLine(fileString[i] + byteArray[i].ToString("X2"));
}
}
else
{
Console.WriteLine("File is empty");
}
}
else {
Console.WriteLine("File " + filePath +" does not exit");
}
Console.WriteLine("Press any key to stop...");
Console.ReadKey();
}
}
【问题讨论】:
-
这听起来不太可能 - 您能否提供一个简短但完整的程序来演示该问题? (控制台应用程序是理想的 - 只需对程序中的字节进行硬编码即可。)
-
我修改了我的原始问题以包含一个完整的控制台程序。
-
但这仍然是在打开一个文件——这意味着如果没有该文件,我们就无法复制它。这就是为什么我建议对字节进行硬编码。请注意,“ASCII 扩展”不是一个单一的编码名称;有很多编码是 ASCII 的 8 位扩展。你确定这真的使用CP-1252吗?另请注意,要查看文件中的 实际 字节,最好使用流,而不是将字节解码为文本,然后将它们重新编码为字节。
-
我真的不确定使用记录器的编码,因为它只被指定为“Ascii”。在尝试了许多代码页之后,这个(1252)返回了最好的结果。除空字符外,所有字节均已解码。
-
您实际上是在尝试取出 bytes 还是字符?如果你想要字节,根本不要使用
StreamReader。重新阅读了这个问题,我想我可以在没有真正看到其余所有内容的情况下回答它......
标签: c# null character ascii space