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.