mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-10-15 19:54:52 +08:00
support big endian and little endian utf 16 in string tokens #32
This commit is contained in:
@@ -18,7 +18,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData(')')]
|
|
||||||
[InlineData('<')]
|
[InlineData('<')]
|
||||||
[InlineData('\\')]
|
[InlineData('\\')]
|
||||||
[InlineData('A')]
|
[InlineData('A')]
|
||||||
@@ -261,6 +260,22 @@ are the same.)";
|
|||||||
Assert.Equal(@" (sleep 1; printf ""QUIT\r\n"") | ", AssertStringToken(token).Data);
|
Assert.Equal(@" (sleep 1; printf ""QUIT\r\n"") | ", AssertStringToken(token).Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void HandlesUtf16Strings()
|
||||||
|
{
|
||||||
|
var input = new ByteArrayInputBytes(new byte[]
|
||||||
|
{
|
||||||
|
0xFE, 0xFF, 0x00, 0x4D, 0x00, 0x69, 0x00,
|
||||||
|
0x63, 0x29
|
||||||
|
});
|
||||||
|
|
||||||
|
var result = tokenizer.TryTokenize(0x28, input, out var token);
|
||||||
|
|
||||||
|
Assert.True(result);
|
||||||
|
|
||||||
|
Assert.Equal(@"Mic", AssertStringToken(token).Data);
|
||||||
|
}
|
||||||
|
|
||||||
private static StringToken AssertStringToken(IToken token)
|
private static StringToken AssertStringToken(IToken token)
|
||||||
{
|
{
|
||||||
Assert.NotNull(token);
|
Assert.NotNull(token);
|
||||||
|
@@ -146,7 +146,32 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
token = new StringToken(builder.ToString());
|
string tokenStr;
|
||||||
|
if (builder.Length >= 2)
|
||||||
|
{
|
||||||
|
if (builder[0] == 0xFE && builder[1] == 0xFF)
|
||||||
|
{
|
||||||
|
var rawBytes = OtherEncodings.StringAsLatin1Bytes(builder.ToString());
|
||||||
|
|
||||||
|
tokenStr = Encoding.BigEndianUnicode.GetString(rawBytes);
|
||||||
|
}
|
||||||
|
else if (builder[0] == 0xFF && builder[1] == 0xFE)
|
||||||
|
{
|
||||||
|
var rawBytes = OtherEncodings.StringAsLatin1Bytes(builder.ToString());
|
||||||
|
|
||||||
|
tokenStr = Encoding.Unicode.GetString(rawBytes);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tokenStr = builder.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tokenStr = builder.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
token = new StringToken(tokenStr);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user