Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Text.Encoding.Default.GetBytes失败_C#_.net Core_.net Core 2.0 - Fatal编程技术网

C# System.Text.Encoding.Default.GetBytes失败

C# System.Text.Encoding.Default.GetBytes失败,c#,.net-core,.net-core-2.0,C#,.net Core,.net Core 2.0,以下是我的示例代码: 代码片段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, fileByt

以下是我的示例代码:

代码片段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();
}
以上代码在框架4.5、4.6.1中工作非常好

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

我也尝试了Encoding.Unicode和Encoding.UTF-8。但最终PDF也会出现同样的错误

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

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

为了更好地理解,我编辑了我的问题。 Sample1.pdf存在于不同的服务器上,并使用WCF将数据传输到客户机,客户机存储文件编码流并转换为Sample2.pdf


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

1:你应该使用
编码的次数;可能有一个假设的情况,但如果有一个:它是难以捉摸的

2:PDF文件不是文本,因此尝试对其使用
编码
只是。。。错;你没有“在这里被破坏”-它只是不是文本

您可能希望看到或


如果您只想复制内容而不进行分析:
File.copy
Stream.CopyTo
是很好的选择。

为什么要将二进制文件转换为字符串?这不是您想要做的事情,文件已经正确地存储在
fileBytes
中。你的最终目标是什么?System.Text.Encoding与文本编码相关,但PDF不是文本文件为什么要将PDF从一个文件读入内存,然后写入另一个文件?为什么不直接复制这个文件呢?请帮助我们描述一下您想要实现的目标。@nyrguds如果认为它是往返的,那就好了,但是。。。我不想依赖它,特别是如果其中有零字节;当有NIL ByTestHank的答案时,大量的文本API会变得焦躁不安。我明白你的意思,PDF文件不是文本。由于这种方法(编码)在过去3年中一直运行良好,我尝试在我的MVC应用程序中复制同样的方法。既然我意识到了这个问题,我现在就要纠正它。:)