Im .NET 1.1 und 2.0 sind folgende Aufrufe der Konstruktoren der Klasse System.Text.UTF8Encoding möglich:
UTF8Encoding()UTF8Encoding(encoderShouldEmitUTF8Identifier:=False)UTF8Encoding(encoderShouldEmitUTF8Identifier:=True)UTF8Encoding(encoderShouldEmitUTF8Identifier:=False, throwOnInvalidBytes:=False)UTF8Encoding(encoderShouldEmitUTF8Identifier:=False, throwOnInvalidBytes:=True)UTF8Encoding(encoderShouldEmitUTF8Identifier:=True, throwOnInvalidBytes:=False)UTF8Encoding(encoderShouldEmitUTF8Identifier:=True, throwOnInvalidBytes:=True)Die Aufrufe
UTF8Encoding()UTF8Encoding(encoderShouldEmitUTF8Identifier:=False)UTF8Encoding(encoderShouldEmitUTF8Identifier:=False, throwOnInvalidBytes:=False)sowie
UTF8Encoding(encoderShouldEmitUTF8Identifier:=True)UTF8Encoding(encoderShouldEmitUTF8Identifier:=True, throwOnInvalidBytes:=False)sind dabei äquivalent, d.h. sie erzeugen funktional identische Instanzen der Klasse.
Die Equals-Methode vergleicht in .NET 1.1 allerdings nur den encoderShouldEmitUTF8Identifier-Parameter von zwei Instanzen. Der Ausdruck utf8falsefalse.Equals(utf8falsetrue) ist also wahr, obwohl sich die Objekte deutlich unterscheiden, was die Behandlung von ungültigen Byte-Sequenzen angeht. In .NET 2.0 arbeitet die Equals-Methode hingegen exakt; beide Parameter müssen übereinstimmen.
Wenn Sie feststellen wollen, ob irgendeine Instanz der UTF8Encoding-Klasse vorliegt, verwenden Sie bspw. If TypeOf utf8 Is System.Text.UTF8Encoding Then und nicht die Equals-Methode.
Die Encoding-Eigenschaft der XmlTextReader-Klasse liefert stets ein Encoding-Objekt, das mit UTF8Encoding(encoderShouldEmitUTF8Identifier:=True, throwOnInvalidBytes:=True) instantiiert wurde, sofern dieses Encoding-Objekt eine Instanz der UTF8Encoding-Klasse ist. Dies ist unabhängig davon, ob der Stream mit einem BOM beginnt!
Encoding.GetEncoding("utf-8") liefert hingegen ein Encoding-Objekt, das mit UTF8Encoding(encoderShouldEmitUTF8Identifier:=True, throwOnInvalidBytes:=False) instantiiert wurde.