mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-10-15 03:34:52 +08:00
Merge pull request #40 from Numpsy/rw/unicode_hex_strings
add utf-16 parsing support to hextoken
This commit is contained in:
@@ -37,6 +37,19 @@
|
|||||||
Assert.Equal(expected, AssertHexToken(token).Data);
|
Assert.Equal(expected, AssertHexToken(token).Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData("<FEFF004C0069006200720065004F0066006600690063006500200036002E0031>", "LibreOffice 6.1")]
|
||||||
|
[InlineData("<FEFF30533093306B3061306F4E16754C>", "こんにちは世界")]
|
||||||
|
public void HandlesUtf16Strings(string s, string expected)
|
||||||
|
{
|
||||||
|
var input = StringBytesTestConverter.Convert(s);
|
||||||
|
|
||||||
|
var result = tokenizer.TryTokenize(input.First, input.Bytes, out var token);
|
||||||
|
|
||||||
|
Assert.True(result);
|
||||||
|
Assert.Equal(expected, AssertHexToken(token).Data);
|
||||||
|
}
|
||||||
|
|
||||||
private static HexToken AssertHexToken(IToken token)
|
private static HexToken AssertHexToken(IToken token)
|
||||||
{
|
{
|
||||||
Assert.NotNull(token);
|
Assert.NotNull(token);
|
||||||
|
@@ -62,7 +62,6 @@ namespace UglyToad.PdfPig.Tokens
|
|||||||
}
|
}
|
||||||
|
|
||||||
var bytes = new List<byte>();
|
var bytes = new List<byte>();
|
||||||
var builder = new StringBuilder();
|
|
||||||
|
|
||||||
for (var i = 0; i < characters.Count; i += 2)
|
for (var i = 0; i < characters.Count; i += 2)
|
||||||
{
|
{
|
||||||
@@ -79,15 +78,29 @@ namespace UglyToad.PdfPig.Tokens
|
|||||||
|
|
||||||
var b = Convert(high, low);
|
var b = Convert(high, low);
|
||||||
bytes.Add(b);
|
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;
|
Bytes = bytes;
|
||||||
Data = builder.ToString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
Reference in New Issue
Block a user