private Encoding CheckEncoding(string newEncodingName)
{
// encoding can be switched on stream input only
if (_ps.stream == null)
{
return _ps.encoding;
}
if (String.Equals(newEncodingName, "ucs-2", StringComparison.OrdinalIgnoreCase) ||
String.Equals(newEncodingName, "utf-16", StringComparison.OrdinalIgnoreCase) ||
String.Equals(newEncodingName, "iso-10646-ucs-2", StringComparison.OrdinalIgnoreCase) ||
String.Equals(newEncodingName, "ucs-4", StringComparison.OrdinalIgnoreCase))
{
if (_ps.encoding.WebName != "utf-16BE" &&
_ps.encoding.WebName != "utf-16" &&
!String.Equals(newEncodingName, "ucs-4", StringComparison.OrdinalIgnoreCase))
{
if (_afterResetState)
{
Throw(SR.Xml_EncodingSwitchAfterResetState, newEncodingName);
}
else
{
ThrowWithoutLineInfo(SR.Xml_MissingByteOrderMark);
}
}
return _ps.encoding;
}
Encoding newEncoding = null;
if (String.Equals(newEncodingName, "utf-8", StringComparison.OrdinalIgnoreCase))
{
newEncoding = UTF8BomThrowing;
}
else
{
try
{
newEncoding = Encoding.GetEncoding(newEncodingName);
}
catch (NotSupportedException innerEx)
{
Throw(SR.Xml_UnknownEncoding, newEncodingName, innerEx);
}
catch (ArgumentException innerEx)
{
Throw(SR.Xml_UnknownEncoding, newEncodingName, innerEx);
}
Debug.Assert(newEncoding.EncodingName != "UTF-8");
}
// check for invalid encoding switches after ResetState
if (_afterResetState && _ps.encoding.WebName != newEncoding.WebName)
{
Throw(SR.Xml_EncodingSwitchAfterResetState, newEncodingName);
}
return newEncoding;
}