private
void
DetectEncoding()
{
if
(
this
.byteLen >= 2)
{
this
._detectEncoding =
false
;
bool
flag =
false
;
if
((
this
.byteBuffer[0] == 0xfe) && (
this
.byteBuffer[1] == 0xff))
{
this
.encoding =
new
UnicodeEncoding(
true
,
true
);
this
.CompressBuffer(2);
flag =
true
;
}
else
if
((
this
.byteBuffer[0] == 0xff) && (
this
.byteBuffer[1] == 0xfe))
{
if
(((
this
.byteLen < 4) || (
this
.byteBuffer[2] != 0)) || (
this
.byteBuffer[3] != 0))
{
this
.encoding =
new
UnicodeEncoding(
false
,
true
);
this
.CompressBuffer(2);
flag =
true
;
}
else
{
this
.encoding =
new
UTF32Encoding(
false
,
true
);
this
.CompressBuffer(4);
flag =
true
;
}
}
else
if
(((
this
.byteLen >= 3) && (
this
.byteBuffer[0] == 0xef)) && ((
this
.byteBuffer[1] == 0xbb) && (
this
.byteBuffer[2] == 0xbf)))
{
this
.encoding = Encoding.UTF8;
this
.CompressBuffer(3);
flag =
true
;
}
else
if
((((
this
.byteLen >= 4) && (
this
.byteBuffer[0] == 0)) && ((
this
.byteBuffer[1] == 0) && (
this
.byteBuffer[2] == 0xfe))) && (
this
.byteBuffer[3] == 0xff))
{
this
.encoding =
new
UTF32Encoding(
true
,
true
);
this
.CompressBuffer(4);
flag =
true
;
}
else
if
(
this
.byteLen == 2)
{
this
._detectEncoding =
true
;
}
if
(flag)
{
this
.decoder =
this
.encoding.GetDecoder();
this
._maxCharsPerBuffer =
this
.encoding.GetMaxCharCount(
this
.byteBuffer.Length);
this
.charBuffer =
new
char
[
this
._maxCharsPerBuffer];
}
}
}