UTF8 to ASCII Converter



  • so folgendes nicht ganz einfaches problem:
    ich möchte belibiege text/plain dateien die UTF8 sind in ASCII umwandeln mit dem hintergrund, dass diese dateien in eine versionkontrolle kommen die nur ASCII mergen kann.

    alles wirkt auch erst recht einfach ich geh die komplette ordnerstruktur durch und schau jede datei an schau erst ob sie den mimetype text/plain hat dann ob sie nicht schon ascii ist (Streamreader.Currentencoding == Encoding.ASCII)
    der Streamreader ist so gesetzt das er sein encoding selber rausfinden soll.
    Und hier besteht schon das erste Problem wenn die datei ein umlaut oder spezielle sonderzeichen einliest erkennt er diese nicht mehr.
    Danach hab ich den kompletten text der datei in einer stringvariablen und möchte die mit einem streamwriter wieder reinschreiben, dem streamwriter wird das encoding 1252 mitgegeben was zu keinen problemen führt, allerdings wenn man das programm anschließend wieder aufruft dann erkennt er die datei wieder als utf8 das passiert auch wenn ich dem streamwriter encoding.ascii mitgebe...

    Hat so was vllt schonmal jemand erfolgreich geschrieben. Ich bin echt für jede Hilfe dankbar verzweifle grade total



  • Wenn ich das richtig verstehe, dann hat nicht der Text in der Datei UTF8 Kodierung sondern die Datei selbst. Soll heißen du löschst die Datei und erstellst sie neu. Oder du schreibst deinen StreamWriter ein wenig um:

    StreamWriter w = new StreamWriter(File.Open("C:\file.txt",FileMode.New));
    

  • Administrator

    Der StreamReader kann das Encoding nur durch BOM rausfinden. Wenn kein BOM vorhanden ist, was wohl bei 99,99% der Plain Text Files der Fall ist, dann verwendet er das Defaultencoding, entweder das Encoding, welches auch an den Konstruktor übergeben wurde, oder dann UTF-8.

    Wenn der Text somit als ASCII vorliegt und du nichts angibst, hat es kein BOM und er liest es als UTF-8 aus. Wenn da Umlaute drin sind, dann werden diese nicht erkannt, bzw. die Dekodierung schlägt fehl.
    Wenn du ASCII schreibst, wird kein BOM rausgeschrieben, weil ASCII das nicht unterstützt. Wenn du das Textfile dann wieder einlesen willst, wird es natürlich als UTF-8 erkannt.

    Das ist ein grosses Problem der Plain Text Files. Sie haben keine Header oder dergleichen, dadurch hat man keine Informationen über die interne Kodierung.

    Grüssli



  • d.h. ich habe keine möglichkeit rauszufinden welche kodierung die files haben?


  • Administrator

    hansihintermsee schrieb:

    d.h. ich habe keine möglichkeit rauszufinden welche kodierung die files haben?

    Plain Text ohne BOM am Anfang, da kannst du nur noch raten.

    Grüssli



  • Dravere schrieb:

    Plain Text ohne BOM am Anfang, da kannst du nur noch raten.

    Oder man überlässt Windows das Raten: http://msdn.microsoft.com/en-us/library/dd318672(VS.85).aspx



  • Oder man nimmt bei BOM-freien Texten mal grundsätzlich Latin-1 an, und bietet einen Optionalen Override an.
    Was IMO oft eine gute Lösung ist.


Anmelden zum Antworten