From 0432f703c419ef80b9bf21facc282fd487f1192c Mon Sep 17 00:00:00 2001 From: Richard Webb Date: Sun, 23 Jun 2019 01:18:48 +0100 Subject: [PATCH] extend HexToken to support UTF-16BE encoded hex strings --- src/UglyToad.PdfPig/Tokens/HexToken.cs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/UglyToad.PdfPig/Tokens/HexToken.cs b/src/UglyToad.PdfPig/Tokens/HexToken.cs index 7978491f..d652dc62 100644 --- a/src/UglyToad.PdfPig/Tokens/HexToken.cs +++ b/src/UglyToad.PdfPig/Tokens/HexToken.cs @@ -62,7 +62,6 @@ namespace UglyToad.PdfPig.Tokens } var bytes = new List(); - var builder = new StringBuilder(); for (var i = 0; i < characters.Count; i += 2) { @@ -79,15 +78,29 @@ namespace UglyToad.PdfPig.Tokens var b = Convert(high, low); bytes.Add(b); + } - if (b != '\0') + // Handle UTF-16BE format strings. + if (bytes.Count >= 2 && bytes[0] == 0xFE && bytes[1] == 0xFF) + { + Data = Encoding.BigEndianUnicode.GetString(bytes.ToArray(), 2, bytes.Count - 2); + } + else + { + var builder = new StringBuilder(); + + foreach (var b in bytes) { - builder.Append((char)b); + if (b != '\0') + { + builder.Append((char)b); + } } + + Data = builder.ToString(); } Bytes = bytes; - Data = builder.ToString(); } ///