关于c#:System.Text.Encoding.Default.GetBytes失败

System.Text.Encoding.Default.GetBytes fails

这是我的示例代码:

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

1
2
3
4
5
6
7
8
9
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并保存到本地。

1
2
3
4
5
6
7
8
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时,原始字节数组和结果字节数组的大小至少是相同的。但是其他编码类型也与字节大小不匹配。

那么,问题是,.NET Core 2.0中的System.Text.Encoding.Default.GetBytes中断了吗?

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

希望我的问题现在有意义。


1:您应该使用Encoding.Default的次数实际上为零;可能有一个假设的情况,但如果有一种情况:它是难以捉摸的

2:PDF文件不是文本,因此尝试在它们上使用Encoding只是...错误;您不是在这里"被破坏"-它不是文本。

您可能希望看到在C#中从PDF提取文本或在.NET中从PDF读取文本

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