diff --git a/src/UglyToad.PdfPig/Encryption/EncryptionHandler.cs b/src/UglyToad.PdfPig/Encryption/EncryptionHandler.cs index 037c39d5..93d420df 100644 --- a/src/UglyToad.PdfPig/Encryption/EncryptionHandler.cs +++ b/src/UglyToad.PdfPig/Encryption/EncryptionHandler.cs @@ -402,7 +402,7 @@ var decrypted = DecryptData(data, reference); - token = new StringToken(OtherEncodings.BytesAsLatin1String(decrypted)); + token = GetStringTokenFromDecryptedData(decrypted); break; } @@ -465,6 +465,25 @@ return token; } + private static StringToken GetStringTokenFromDecryptedData(byte[] data) + { + if (data[0] == 0xFE && data[1] == 0xFF) + { + var str = Encoding.BigEndianUnicode.GetString(data).Substring(1); + + return new StringToken(str, StringToken.Encoding.Utf16BE); + } + + if (data[0] == 0xFF && data[1] == 0xFE) + { + var str = Encoding.Unicode.GetString(data).Substring(1); + + return new StringToken(str, StringToken.Encoding.Utf16); + } + + return new StringToken(OtherEncodings.BytesAsLatin1String(data), StringToken.Encoding.Iso88591); + } + private byte[] DecryptData(byte[] data, IndirectReference reference) { if (useAes && encryptionKey.Length == 32)