C# 修复在C中处理的PDF文件的错误编码#

C# 修复在C中处理的PDF文件的错误编码#,c#,pdf,encoding,utf-8,C#,Pdf,Encoding,Utf 8,我正在做一个项目,我们处理的PDF文件应该是从不同的数据源导入的,但是我们注意到其中一些PDF文件只显示为空白页。就像一个有10页的文件,所有的都是空的 在回顾了一些老代码之后,我注意到导入空白PDF的过程是这样做的: RestClient client = new RestClient(); RestRequest request = RestRequest(path, Method.Get, DataFormat.Json); //yup, this .Get is redundant be

我正在做一个项目,我们处理的PDF文件应该是从不同的数据源导入的,但是我们注意到其中一些PDF文件只显示为空白页。就像一个有10页的文件,所有的都是空的

在回顾了一些老代码之后,我注意到导入空白PDF的过程是这样做的:

RestClient client = new RestClient();
RestRequest request = RestRequest(path, Method.Get, DataFormat.Json);
//yup, this .Get is redundant because the verb was already specified on the request
var result = client.Get(request); 
string fileContent = result.Content;
byte[] fileBytes = Encoding.UTF8.GetBytes(fileContent);
然后继续使用将文件编码为UTF8的字节数组保存文件。 据我所知,那是错误的。文件应在字节级别进行处理,并在保存之前避免任何编码,编码用于读取文件,但在保存文件之前不进行编码,因为您现在正在更改文件内容,导致出现空白PDF问题,因为现在它以难以辨认的字符结束

现在,问题是原始文件不见了,无法取回,我们需要修复这些“损坏”的文件,但我仍然不知道如何执行反向过程来获取这些文件,读取它们,消除编码造成的混乱,并将它们恢复到原始状态。 我已经尝试过最明显的一种方法,即使用UTF8.GetDecoder()尝试解码文件内容,但没有成功

你知道我们该怎么做才能把这些文件恢复到原来的格式吗?我喜欢肯定这不是一件无法修复的事情,我只是看不到正确的地方

编辑:我还随机选取了一个可以正常工作的pdf,像这样处理,以查看pdf文件的内容发生了多大的变化,主要的变化是在原始文档中可以看到多少奇怪的字符,在对它们进行编码后,它们变得与此类似■ 在记事本上打开时


编辑2:我知道将内容作为字符串获取是错误的,并且RestSharp有一个本应使用的RawBytes属性,因此从一开始就没有对任何内容进行编码。这不是关于它应该是什么样子的,因为它是几个月前别人的代码,我已经用正确的方法更新了它,但问题是它几个月前用那种旧方法导入的文件,如果有任何方法可以通过撤销将其作为字符串处理所造成的混乱来恢复它们,而不是字节。

您的代码示例没有帮助。
getFileContent()
做什么?下一行甚至不会编译,但我假设您打算使用
GetBytes()
?我不认为编码是错误的。错误是将文件读入字符串。您应该用字节[]fo替换这两条语句;eButes=File.ReadAllBytes()@Crowcoder代码只是用来显示算法在做什么。GetFileContent只是以字符串的形式检索文件内容,仅此而已。它可以是File.ReadAllText()或任何其他方式,然后对其进行编码,通过编码将其转换为字节数组(顺便说一句,我添加了UTF8之后缺少的.GetBytes()。@jdweng我完全同意你的看法。理想情况下,这应该是在字节级别完全管理的内容,其他导入也是这样做的,但出于某种原因,创建该导入的人决定使用字符串来执行此操作,从而导致出现“GetFileContent仅将文件内容检索为字符串,仅此而已”的问题-但执行此操作时,
GetFileContent
使用哪种编码?如果它也假定为UTF-8,那么文件内容就是在这里损坏而无法修复的(有些字节序列在解释为UTF-8文本时毫无意义;这些序列通常会被替换字符替换,从而丢失原始字节)。如果它采用不同的编码,那么在
fileBytes=…
代码行中也使用不同的编码。