我正在将二进制文件转换为文本并将其转储为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字符除外。
答案 0 :(得分:0)
看起来你只是简单地从文件中弄乱了。我假设path
包含文本数据;在这种情况下,您最好只使用:
string result = File.ReadAllText(path);
可选择指定编码:
string result = File.ReadAllText(path, Encoding.UTF8);
目前,你是:
(处理string
,byte[]
和FileStream
的方式也存在一些效率低下的问题,但坦率地说,如果你的答案得到了错误,那就没有实际意义了)< / p>
最后,你的替换:什么都不做:
result.Replace("컴", "-");
应该是:
result = result.Replace("컴", "-");
(如果仍然需要)