3 Stimmen

Wie überprüft man, ob Zeichen vorhanden sind, die mit GetBytes(string) in "?" umgewandelt werden?

Ich schreibe ein Stück Code für eine SSIS 2005-Skriptkomponente, um Daten aus einer Informix-Datenbank (in der die Datenbankzeichenfolgen als UTF8 gespeichert sind) zu lesen.

Die Ausgabe dieses Strings muss in einen Textstrom (DT_TEXT) geladen werden, der unter Verwendung der Codepage 1252 (ANSI - Lateinisch I) codiert ist.

Hier ist ein einfaches Beispiel dafür, was ich erreichen möchte (AllColumnsBuffer ist der Ausgabepuffer der Skriptkomponente, ColumnText ist der Name des DT_TEXT-Feldes, das ich lade).

        Dim s As String = "Testing,1,2,3" & System.Text.RegularExpressions.Regex.Unescape("\u4EB5")
        AllColumnsBuffer.AddRow()
        AllColumnsBuffer.ColumnText.AddBlobData(encoding.GetEncoding(1252).GetBytes(s))

Ich muss einen Fehler werfen, wenn beim Encoding Zeichen gefunden werden, die nicht in 1252 konvertiert werden können. Es scheint, dass es derzeit einfach ein ? einfügt, wenn ein Zeichen in der Quelle nicht existiert. Gibt es eine Möglichkeit zu überprüfen, ob das Zeichen in der Zielsprachenseite existiert?

2voto

Jon Skeet Punkte 1325502

Sie könnten eine neue Codierung erstellen und dann die EncoderFallback-Eigenschaft entweder auf Ihren eigenen Fallback setzen oder, wenn eine Ausnahme ausreicht, dann können Sie EncoderExceptionFallback verwenden. Ihr eigener Fallback könnte (sagen wir) anmutig ohne Ausnahme fehlschlagen, aber ein Flag setzen, um Ihnen danach mitzuteilen, dass es fehlgeschlagen ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X