nicht richtig dekodiert. Ich erhalte eine SGML-Datei, und ich extrahiere Daten daraus mit uuDecoder, und ich erstelle PDF daraus.Einige uuEncoded-Dateien werden in C#
Es funktioniert seit vielen Jahren gut, aber seit den letzten Monaten beobachten wir, dass einige der PDF-Dateien nicht geladen werden können und es heißt "Laden des PDF-Dokuments fehlgeschlagen" in Chrome.
Ich habe über diese Frage unten gegangen, die etwas ähnliches wie meinen Fall hat, aber es ist in Python, und ich habe es in C#
How can we figure out why certain uuencoded files are not decoding properly using Python?
Hier ein Beispiel für eine txt-Datei ist, die ein eingebettetes hatte uuencoded pdf, die sich mit Ausgabe: https://www.sec.gov/Archives/edgar/data/1631661/000163166116000004/0001631661-16-000004.txt
Mein uuDecoder Algorithmus-Code ist genau diesem ähnlich ist: http://blog.stevex.net/2004/04/c-classes-to-decode-yenc-and-uuencode-encoded-usenet-binaries/
Ich fand heraus, dass es Index im folgenden Code außerhalb der Reichweite Ausnahme wirft, wo es 61 Zeichen in einer Zeile erwartet, aber einige der Linien nicht exakt 61 chacters:
public static byte[] uuDecode(string buffer)
{
// Create an output array
byte[] outBuffer = new byte[(buffer.Length-1)/4*3];
int outIdx = 0;
// Get the string as an array of ASCII bytes
byte[] asciiBytes = Encoding.ASCII.GetBytes(buffer);
for (int i=0; i<asciiBytes.Length; i++)
{
asciiBytes[i] = (byte)((asciiBytes[i]-0x20) & 0x3f);
}
// Convert each block of 4 input bytes into 3
// output bytes
for (int i = 1; i <= (asciiBytes.Length-1); i += 4)
{
outBuffer[outIdx++] = (byte)(asciiBytes[i] << 2 | asciiBytes[i+1] >> 4);
outBuffer[outIdx++] = (byte)(asciiBytes[i+1] << 4 | asciiBytes[i+2] >> 2);
outBuffer[outIdx++] = (byte)(asciiBytes[i+2] << 6 | asciiBytes[i+3]);
}
return outBuffer;
}
Bitte beachten Sie, dass nicht alles ist im Zusammenhang mit "Index außerhalb des Bereichs" Ausnahme hier also bitte nicht umleiten dorthin.
Ich habe versucht, wie unten fehlenden Zeichen mit Leerzeichen zu füllen:
if (line.Length < 61) ////Making sure length is 61 characters
{
var builder = new StringBuilder();
builder.Append(line);
var missing = 61 - line.Length;
for (int i = 0; i < missing; i++)
{
builder.Append(" ");
}
line = builder.ToString();
}
Kann mir jemand bitte helfen zu bekommen, warum dies nicht für einige PDF-Dokument arbeitet?
Veröffentlichen Sie den Code und ein Beispiel, das das Problem reproduziert. "Fast gleich" bedeutet, dass es keine Möglichkeit gibt, Fehler zu finden, die durch die Unterschiede verursacht werden. –
Es ist genau derselbe Algorithmus, jetzt, wenn er Ihre Bedenken beantwortet @PanagiotisKanavos – Neel
Ist es wert, ganzen Algorithmus hier @PanagiotisKanavos zu setzen? – Neel