System.Text.Encoding.Default.GetBytes失败

时间:2018-03-27 11:23:49

标签: c# .net-core .net-core-2.0

以下是我的示例代码:

CodeSnippet 1:此代码在我的文件存储库服务器中执行,并使用WCF服务将文件作为编码字符串返回:

byte[] fileBytes = new byte[0];
using (FileStream stream = System.IO.File.OpenRead(@"D:\PDFFiles\Sample1.pdf"))
{
    fileBytes = new byte[stream.Length];
    stream.Read(fileBytes, 0, fileBytes.Length);
    stream.Close();
}

string retVal = System.Text.Encoding.Default.GetString(fileBytes);  // fileBytes size is 209050

代码段2: 需要PDF文件的客户端框接收编码的字符串并转换为PDF并保存到本地。

byte[] encodedBytes = System.Text.Encoding.Default.GetBytes(retVal); /// GETTING corrupted here

string pdfPath = @"C:\DemoPDF\Sample2.pdf";
using (FileStream fileStream = new FileStream(pdfPath, FileMode.Create))  //encodedBytes is 327279
{
    fileStream.Write(encodedBytes, 0, encodedBytes.Length);
    fileStream.Close();
}

以上代码工作绝对精美Framework 4.5,4.6.1

当我在Asp.Net Core 2.0中使用相同的代码时,它无法正确转换为字节数组。我没有收到任何运行时错误,但是最终的PDF在创建后无法打开。 pdf文件损坏时引发错误。

我也试过了Encoding.Unicode和Encoding.UTF-8。但是为最终PDF获得相同的错误。

另外,我注意到当我使用Encoding.Unicode时,至少原始字节数组和Result字节数组大小相同。但是其他编码类型也与字节大小不匹配。

那么,问题是, System.Text.Encoding.Default.GetBytes在.NET Core 2.0中被破坏了吗?

我已经编辑了我的问题以便更好地理解。 Sample1.pdf存在于不同的服务器上,并使用WCF进行通信,以将数据传输到存储文件编码流的Client,并转换为Sample2.pdf

希望我的问题现在有道理。

1 个答案:

答案 0 :(得分:7)

1:使用Encoding.Default的次数基本为零;可能有一个假设的情况,但如果有一个:它是难以捉摸的

2:PDF文件不是文字,所以尝试在它们上使用Encoding只是......错了;你不是"在这里受到腐蚀" - 它只是不是文本

您可能希望看到Extracting text from PDFs in C#Reading text from PDF in .NET

如果您只想复制内容而不进行解析:File.CopyStream.CopyTo是不错的选择。