Announcement

Collapse
No announcement yet.

Umlaute werden falsch eingelesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Umlaute werden falsch eingelesen

    Hallo Zusammen,

    ich habe ein (für mich) größeres Problem.

    Ich habe aus Neugier die Projekt-Language-Einstellung auf Deutsch gesetzt und anschließend wieder auf Standard.

    Seither erhalte ich Sonderzeichen, wenn ich eine Textdatei auslese.

    Bsp: Ich habe eine Textdatei mit dem Namen "Meldungen.txt". Dort ist ein Satz drin der lautet
    Sie haben einen unbegründeten Eintrag übergeben. Bitte begründen Sie den Eintrag"

    Wenn ich Ihn einlese und an eine MessageBox weitergebe erscheint für die Umlaute ein Sonderzeichen.

    Was kann ich unternehmen, dass die Umlaute wieder erscheinen!!

    Vielen Dank für Eure Hilfe.

    Gruß Lerando

    Ich habe noch vergessen, dass ich in die Textdateien die Umlaute ohne Probleme schreiben kann.
    Zuletzt editiert von gfoidl; 14.12.2011, 16:44.

  • #2
    Hallo,

    Ich habe aus Neugier die Projekt-Language-Einstellung auf Deutsch gesetzt und anschließend wieder auf Standard.
    Welche Einstellung meinst du damit? Die unter den Projekt-Eigenschaften? Diese hat darauf aber keine Auswirkung.

    Ist der Inhalt der Text-Datei eh nicht verändert?


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Originally posted by gfoidl View Post
      Welche Einstellung meinst du damit? Die unter den Projekt-Eigenschaften? Diese hat darauf aber keine Auswirkung.
      System.Windows.Forms.Form.Language.

      Ist die Language-Eigenschaft unter Entwurf, wenn ich auf den Entwurf des Fensters bin.

      Originally posted by gfoidl View Post
      Ist der Inhalt der Text-Datei eh nicht verändert?
      Wie meinst Du das? Ich habe nichts verändert. Es sind nur Umlaute in der Textdatei die aber beim gebrauch nicht als Umlaute angezeigt werden.

      [highlight=C#]
      MessageBox.Show(ReadInFile("Meldungen.TXT"));
      [/highlight]

      In der MessageBox werden die Umlaute als Sonderzeichen dargestellt. Siehe Bild.
      Attached Files

      Comment


      • #4
        Wie schaut der Quellcode von ReadInFile aus?
        Du kannst beim laden von Textdateien die erwartete Codierung mit angeben. Am besten aber die Textdatei UTF8/Unicodisch mit BOM speichern.

        Comment


        • #5
          Originally posted by Bernhard Geyer View Post
          Wie schaut der Quellcode von ReadInFile aus?
          Du kannst beim laden von Textdateien die erwartete Codierung mit angeben. Am besten aber die Textdatei UTF8/Unicodisch mit BOM speichern.
          Ich habe die Textdatei manuell angelegt unter Windows7. Einstellungen sind alle auf Deutsch.

          Hier der Code
          [highlight=C#]
          string RW_Wert = "";

          String Pfad = System.Windows.Forms.Application.StartupPath + @"\" + DATEINAMEN;

          FileStream fs = new FileStream(Pfad, FileMode.Open);
          StreamReader sr = new StreamReader(fs);

          RW_Wert = sr.ReadLine().ToString();

          return RW_Wert;
          [/highlight]

          Wo kann ich denn den UNICODE hier setzen?

          Danke.

          Comment


          • #6
            Dem Konstruktor von StreamReader kannst du das passende Encoding der Datei mitgeben.

            Ich habe die Textdatei manuell angelegt unter Windows7
            Das heißt nichts. Wie, womit und als was hast du die Datei gespeichert?

            Comment


            • #7
              Habe das Encoding auf Default gesetzt. Jetzt Funktionierts.


              Vielen Dank. Ihr seid einfach unschlagbar.

              Gruß Lerando

              PS: Allerdings bin ich der Meinung, dass das erst passiert ist, als in die Eigenschaft der Language-Einstellung verändert habe. Beschwören kann ich es nicht.

              Comment


              • #8
                Habe das Encoding auf Default gesetzt. Jetzt Funktionierts.
                Schön. Ist aber trotzdem eine schlechte Idee. Default ist sprachabhängig kann also auf jedem Rechner anders sein. Wenn du die Datei mit Standardeinstellung mit z.B. Notepad auf deinem Rechner erzeugt hast dann geht das (zumindest solange wie du nicht die Codepage/Sprache änderst). Portabel ist anders!

                Der StreamReader geht standardmäßig von UTF-8 aus. Das ist wesentlich portabel wenn du denn dein File auch als UTF-8 speicherst.

                Comment


                • #9
                  Originally posted by Ralf Jansen View Post
                  Schön. Ist aber trotzdem eine schlechte Idee. Default ist sprachabhängig kann also auf jedem Rechner anders sein. Wenn du die Datei mit Standardeinstellung mit z.B. Notepad auf deinem Rechner erzeugt hast dann geht das (zumindest solange wie du nicht die Codepage/Sprache änderst). Portabel ist anders!

                  Der StreamReader geht standardmäßig von UTF-8 aus. Das ist wesentlich portabel wenn du denn dein File auch als UTF-8 speicherst.
                  Ich danke Dir für diese Auskunft. Aber, wie schaffe ich es, dass die Daten richtig eingelesen werden, wenn ich annehmen muss, dass Textänderungen in einer Textdatei von einem User durchgeführt werden. Sobald dieser im Notepad Änderungen durchführt, passiert doch dasselbe?

                  Welche Einstellung benötige ich, damit die Umlaute gewährlestet sind. Mit
                  [highlight=C#]
                  FileStream fs = new FileStream(Pfad, FileMode.Open);
                  StreamReader sr = new StreamReader(fs,Encoding.UTF8);
                  [/highlight]
                  funktioniert es eben nicht.

                  Gruß Lerando

                  Comment


                  • #10
                    Ich danke Dir für diese Auskunft. Aber, wie schaffe ich es, dass die Daten richtig eingelesen werden, wenn ich annehmen muss, dass Textänderungen in einer Textdatei von einem User durchgeführt werden. Sobald dieser im Notepad Änderungen durchführt, passiert doch dasselbe?
                    Du mußt wissen welches Encoding die Datei hat. Derjenige der die Datei bearbeitet muß sie sie also auch im passenden Format speichern egal welchen Editor er verwendet. Nur weil die Extension txt ist ist der Inhalt eben noch nicht eindeutig!. Beim speichern muß der User also drauf achten genauso wie er in Word drauf achten muß ob er als doc oder als docx speichert.

                    Du kannst natürlich auch versuchen über irgendwelche statistischen Auswertungsverfahren der Bytefolge die die txt-Datei ausmacht das Encoding zu erraten.

                    Comment


                    • #11
                      Wenn ich die INI-Funktion von Windows benutze, habe ich damit keine Probleme?

                      [highlight=C#]
                      [DllImport( "kernel32" )]
                      private static extern int GetPrivateProfileString
                      ( string Abschnitt, string ID_Nr, string Zuordnung, StringBuilder retVal, int Länge, string INI_Pfad );
                      [/highlight]

                      Vielen Dank für die Antwort

                      Gruß Lerando

                      Comment


                      • #12
                        Wenn ich die INI-Funktion von Windows benutze, habe ich damit keine Probleme?
                        Nein. GetPrivateProfileString ist nur ein Alias für entweder GetPrivateProfileStringA oder GetPrivateProfileStringW. Also die ANSI bzw. Unicode Implementierung. Aus deinem Code zu schließen wird wahrscheinlich GetPrivateProfileStringW verwendet. Dann muß deine Ini-Datei in Notepad auch als Unicode (nicht ANSI und nicht UTF-8) gespeichert werden damit das immer funktioniert.

                        Comment

                        Working...
                        X