Я извлекаю файл SGML и извлекаю данные из него с помощью uuDecoder, и я создаю PDF из него.Некоторые файлы uuEncoded неправильно декодируются в C#
Он работает отлично с многих лет, но с последних нескольких месяцев мы наблюдаем, что некоторые из файлов PDF не могут загружаться, и в нем говорится: «Не удалось загрузить документ PDF» в хром.
Я прошел через это под вопрос, который имеет что-то похожее на мой случай, но это в Python, и я его в C#
How can we figure out why certain uuencoded files are not decoding properly using Python?
Вот пример текстового файла, который был внедренным UUENCODED PDF, который имея вопрос: https://www.sec.gov/Archives/edgar/data/1631661/000163166116000004/0001631661-16-000004.txt
Мой uuDecoder код алгоритма точно похож на это: http://blog.stevex.net/2004/04/c-classes-to-decode-yenc-and-uuencode-encoded-usenet-binaries/
я узнал, что он бросает индекс из исключения диапазона ниже в коде, где он ожидает 61 символов в строке, но некоторые из линий не имеет точных 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;
}
Пожалуйста, обратите внимание, что нет ничего связанные с исключением «Index out of range» здесь, поэтому, пожалуйста, не перенаправляйте это туда.
Я попытался заполнить недостающие символы с пробелами, как показано ниже:
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();
}
Может кто-то пожалуйста, помогите мне получить, почему это не работает для нескольких PDF документа?
Отправьте код и пример, который воспроизводит проблему. «Почти похоже» означает, что мы не можем найти ошибок, вызванных различиями. –
Это тот же алгоритм, теперь, если он отвечает на вашу проблему @PanagiotisKanavos – Neel
Стоит ли здесь ставить полный алгоритм здесь @PanagiotisKanavos? – Neel