none
Umlaute im Textbox.Text Output (TextBox.Text) in VisualStudio 2019 RRS feed

  • Frage

  • Hallo zusammen,

    es hat sicher schon jemand ein Problem mit den Umlauten in einem String aus einer TextBox.Text als Quelle gehabt.

    Und  bestimmt eine Lösung dafür gefunden? Dafür wäre ich sehr dankbar.

    Ich nutze aktuell VS 2019 mit PowerShell Pro Tolls, also Powershell 5.

    Ich entnehme aus einer Texbox die Text Eigenschaft und möchte diese in einer Funktion als Parameter nutzen.

    Die Text-Eigenschaft der Textbox ist in der Form als Default auf ein String[] Array eingestellt, wo ein Beispiel-String drin steht, da ist ein "ä" enthalten.
    Nach GUI Aufruf kann dann der String neu definiert werden.

    Eigentlich ganz einfache Geschichte, nur leider funktioniert das Ganze entweder nur, wenn in der als Beispiel vordefinierten TextBox.Text Eigenschaft keine Umlaute drin sind oder man definiert den String ( TextBox.Text ) im Nachhinein, nach dem die Form aufgerufen wurde.
    Dann werden auch die Umlaute richtig weiter gegeben.
    Es dürfen also keine Umlaute in einer vordefinierten TextBox.Text- Eigenschaft enthalten sein.

    Anstatt "a" wird in der GUI "ä" angezeigt und so an die Funktion weiter gereicht.

    [System.Text.Encoding]::Default

    IsSingleByte      : True
    BodyName          : iso-8859-1
    EncodingName      : Westeuropäisch (Windows)
    HeaderName        : Windows-1252
    WebName           : Windows-1252
    WindowsCodePage   : 1252
    IsBrowserDisplay  : True
    IsBrowserSave     : True
    IsMailNewsDisplay : True
    IsMailNewsSave    : True
    EncoderFallback   : System.Text.InternalEncoderBestFitFallback
    DecoderFallback   : System.Text.InternalDecoderBestFitFallback
    IsReadOnly        : True
    CodePage          : 1252

    In VS unter Extras/Umgebung/Internationale Einstellungen/Sprache ist Deutsch eingestellt.

    Die Form Eigenschaft "Language" ist auf (Standard) eingestellt. Die kann ich aktuell nicht ändern, weil dann der Designer-File zerschossen und die Form unbrauchbar wird (Bug). Dazu habe ich den Entwickler angeschrieben. Ob das was gebracht hätte, ist unklar.

    Vielen Dank für eure Hilfe


    • Bearbeitet J__Z Montag, 27. September 2021 12:33
    Montag, 27. September 2021 11:06

Alle Antworten

  • Dein Problem ist, dass die Ziel-App kein UTF8 unterstützt. Die Powershell wird häufig mit Codepage 65001 (UTF8) ausgeführt.
    Die Strings selber sind immer in Unicode im Speicher abgelegt (2-Byte per Zeichen). Wenn du also ein Encoding in 1252 machst und das wieder in den String lädst, hast du wieder Unicode. Ist also vollkommen sinnlos.

    Vor dem Aufruf des Cmdlet's mache einen ChangeCodepage in ANSI

    CHCP 1252

    Nach dem Aufruf wieder zurück in 65001 (UTF8).


    Montag, 27. September 2021 11:58
  • Ich habe etwas Komisches festgestellt.

    Jetzt wird Folgendes angezeigt:

    IsSingleByte              : True
    BodyName                 : ibm850
    EncodingName           : Westeuropäisch (DOS)
    HeaderName              : ibm850
    WebName                  : ibm850
    WindowsCodePage   : 1252
    IsBrowserDisplay       : False
    IsBrowserSave           : False
    IsMailNewsDisplay      : False
    IsMailNewsSave          : False
    EncoderFallback           : System.Text.InternalEncoderBestFitFallback
    DecoderFallback          : System.Text.InternalDecoderBestFitFallback
    IsReadOnly                 : True
    CodePage                  : 850


    Zu:

    Vor dem Aufruf des Cmdlet's mache einen ChangeCodepage in ANSI

    CHCP 1252

    Nach dem Aufruf wieder zurück in 65001 (UTF8)

    Nach dem Aufruf wieder zurück in 65001 (UTF8)

    Könntest du mir vielleicht dein Code-Beispiel schicken☺?


    Donnerstag, 30. September 2021 03:26
  • CHCP 1252
    CHCP 65001

    Per CHCP ohne Angabe wird die aktuelle Codepage angezeigt.
    IBM850 entspricht auch DOS850 und steht i.d.R. für die OEM Codepage.
    Die OEM-Codepage wird gerne für eine CMD-Box voreingestellt.
    Rufe z.B. cmd.exe auf und gib CHCP ein.

    Vielleicht kannst du auch damit experimentieren:
    https://docs.microsoft.com/de-de/powershell/module/microsoft.powershell.core/about/about_character_encoding?view=powershell-7.1

    Stichworte:

    • $PSDefaultParameterValues
    • $OutputEncoding

    Donnerstag, 30. September 2021 06:59
  • Hallo J,

    Stellen Sie sicher, dass das Dokument im Visual Studio-Designer geöffnet ist.

    Ziehen Sie von der Registerkarte Allgemeine Steuerelemente der Toolbox ein TextBox-Steuerelement in das Dokument.

    Klicken Sie im Menü Ansicht auf Eigenschaftenfenster.

    Suchen Sie TextBox1 im Dropdown-Feld des Eigenschaftenfensters, und ändern Sie die Name-Eigenschaft des Textfelds in displayText.

    Ziehen Sie ein Button-Steuerelement in das Dokument und ändern Sie die folgenden Eigenschaften.

    Eigentumswert
    Name einfügenText
    Text Text einfügen
    Jetzt können Sie den Code schreiben, der ausgeführt wird, wenn auf die Schaltfläche geklickt wird.

    https://docs.microsoft.com/de-DE/visualstudio/vsto/walkthrough-displaying-text-in-a-text-box-in-a-document-using-a-button?view=vs-2019

    Ich hoffe, dies beantwortet alle Ihre Fragen, wenn nicht, posten Sie es bitte erneut.
    Wenn eine Antwort hilfreich ist, klicken Sie bitte auf "Antwort akzeptieren" und bewerten Sie sie: )
    Donnerstag, 30. September 2021 10:52
  • Zeige einfach mal den Code, der die Info ausliest und wie du die Information dann weitergibst.
    Mir ist im Moment nicht klar, wie due Visualstudio mit Powershell verbindest oder ob das überhaupt relevant ist.
    Donnerstag, 30. September 2021 15:37