【问题标题】:Null and Space char decoding in ASCII 8-bit encoded fileASCII 8 位编码文件中的空字符和空格字符解码
【发布时间】: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


【解决方案1】:

我有一个 ASCII 扩展的 txt 文件,我需要将其转换为字节数组。

那么就不要通过文字了。如果您只想获取文件中的字节,那真的很容易:

byte[] data = File.ReadAllBytes(filePath);

每当您发现自己解码字节以获取文本,然后使用相同的编码对该文本进行编码以获取字节时,您首先应该问自己是否真的需要进行文本转换。

【讨论】:

  • 我也试过这个选项,得到了相同的结果(空字符解码为 0x20)
  • @BelkisMorgalo:在这种情况下没有“解码” - 如果您看到的值为 0x20,那么这就是文件中的内容。我建议您使用二进制文件编辑器(例如 Free Hex Editor Neo)来验证。
  • 我再次尝试使用记录器创建的新文件,它工作正常。似乎我通过测试不同类型的编码和文件的进一步处理错误地修改了文件。 Free Hex Editor Neo 的好工具,谢谢。感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 2016-02-12
  • 2015-12-01
相关资源
最近更新 更多