C# System.Text.Encoding.Default.GetBytes失败
以下是我的示例代码: 代码片段1:此代码在我的文件存储库服务器中执行,并使用WCF服务以编码字符串的形式返回文件: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
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应用程序中复制同样的方法。既然我意识到了这个问题,我现在就要纠正它。:)