C#将二进制转换为文本 - 问号?

时间:2014-09-09 13:45:13

标签: c# text unicode binary converter

我正在将二进制文件转换为文本并将其转储为PDF。我有这个工作,但我需要产生与另一个程序的一些样本相同的输出在另一种语言中(它产生文本,然后将其转换为二进制,所以我想我正在转换回来?)。

除了一件事,我得到相同的输出。我应该有一堆破折号来引发主题标题,但我得到了问号(?)。如果我使用Notepad ++显示二进制文件,问号会变成一些随机的韩文字符()。我尝试过result.Replace("?", "-");result.Replace("컴", "-");,我甚至尝试使用Contains()进行检查,但没有触发任何内容。

如何更换它们?

不确定它是否会有所帮助,但这是我的代码:

private void btnConvertBinaryToPDF_Click(object sender, EventArgs e)
    {
        PdfDocument document = new PdfDocument(); //make new pdf document
        PdfPage page = document.AddPage(); //add a page to the document
        XGraphics gfx = XGraphics.FromPdfPage(page); //use this to draw/write on the specified page
        XFont font = new XFont("Courier New", 10); //need a font to write with

        string result = "";
        string path = @"C:\Users\file";

        byte[] b = new byte[1024];
        UTF8Encoding temp = new UTF8Encoding(true);
        FileStream fs = File.OpenRead(path);
        int i = 1; 
        while (fs.Read(b, 0, b.Length) > 0)
        {
            string tmp = temp.GetString(b);
            result += tmp;
            b = new byte[1024]; //clear the buffer 
        }


        if (result.Contains("?"))
        {
            Console.WriteLine("contains!");
        }
        result.Replace("컴", "-");

        XTextFormatter tf = new XTextFormatter(gfx);
        XRect rect = new XRect(40, 100, 500, 100);
        tf.DrawString(result, font, XBrushes.Black, rect, XStringFormats.TopLeft);

        string filename = "HelloWorld.pdf"; //make the filename
        document.Save(filename); //save the document to the filename
        Process.Start(filename); //open the file to show the document
    }

编辑:path包含二进制数据。我需要获得其内容的文本表示。以上工作正常,但编号高于127的ASCII字符除外。

1 个答案:

答案 0 :(得分:0)

看起来你只是简单地从文件中弄乱了。我假设path包含文本数据;在这种情况下,您最好只使用:

string result = File.ReadAllText(path);

可选择指定编码:

string result = File.ReadAllText(path, Encoding.UTF8);

目前,你是:

  • 将更多字节视为数据而不是读取每次迭代
  • 不处理部分字符读取

(处理stringbyte[]FileStream的方式也存在一些效率低下的问题,但坦率地说,如果你的答案得到了错误,那就没有实际意义了)< / p>

最后,你的替换:什么都不做

result.Replace("컴", "-");

应该是:

result = result.Replace("컴", "-");

(如果仍然需要)