2016-04-28 15 views
1

Ich habe DXF-Dateien aus verschiedenen Quellen und verschiedenen europäischen Sprachen und ich habe ein Problem beim Lesen der Quelldatei in meine Anwendung. Eine DXF-Datei ist eine Textdatei und kann mit vielen Arten von CAD oder ähnlicher Software erstellt werden. Die gesamte Datei wird eingelesen und in einem Array gespeichert, der Gruppencode befindet sich in der ersten Spalte des Arrays und der Datenwert in der zweiten Spalte. So kann ich die Datenwerte im Array sehen, wenn ich im Debug-Modus bin.vb .net 2015 Codierung kann nicht Sonderzeichen

Ich habe versucht mit:

For Each sLine In File.ReadLines(strOrgDxfFileName, System.Text.Encoding.UTF32) 

und

For Each sLine In File.ReadLines(strOrgDxfFileName, System.Text.Encoding.Default) 

ich einen Computer mit einem deutschen OS bin mit, so könnte ich mir vorstellen, dass, wenn .Default Verwendung es abholen würde die Deutsche Codepage und damit die deutschen Sonderzeichen äÄöÖüÜß. Aber wenn zwei Dateien aus verschiedenen Quellen verwendet werden, funktioniert es manchmal und manchmal nicht.

Datei 1 mit .Default gibt "höhenmäßig angepaßt" was richtig ist. Datei 1 mit .UTF8 gibt "h henm ig angepa t" was falsch ist.

Datei 2 mit .Default gibt "Brückenstraße", die falsch ist. Datei 2 mit .UTF8 gibt "Brückenstraße", die korrekt ist.

Ich finde keine zuverlässige Möglichkeit, die Sonderzeichen korrekt einzulesen. Ich werde auch DXF-Dateien in anderen Sprachen bekommen, deshalb ist es wichtig, dass ich immer die Sonderzeichen bekomme, unabhängig von der Sprache und unabhängig vom Betriebssystem, in dem der DXF erstellt wurde oder vom Betriebssystem des Lesecomputers.

Ich habe seit ein paar Tagen damit zu kämpfen, komme aber nirgendwohin. Kann mir jemand einen Rat geben?

Ben

+0

Eine Suche nach "dxf Text Encoding-Datei" gibt einige Vorschläge. –

+0

Ich hatte das getan, bevor ich es gepostet habe und habe es einfach wiederholt und ich finde nichts, was für meinen Fall von Nutzen ist. Danke trotzdem. – BenS

Antwort

-2

versuchen Sie dies, wenn Werke mich

Encoding.ASCII.GetString(Encoding.UTF8.GetBytes(yourString)) 

wissen lassen, oder es auf diese Weise versuchen

Dim converted as Byte() = Encoding.Convert(utf8, Encoding.UTF8, _ 
              Encoding.GetEncoding(28591)) 

Wenn ich Ihnen gut bekommen könnte und was ich dachte, dass Sie versuchen, zu tun ist, versuchen Sie, eine DXF-Auto-Kartendatei zu lesen: die ich werde Ihnen empfehlen, eine Autocad-Bibliothek oder eine Drittanbieterbibliothek zu verwenden, um es zu erreichen: 1. v isit dieser Link: Link to download DXF Library und suchen Sie nach netDxf 1.1.2 und laden Sie es herunter. 2.Importieren die Bibliothek zu einem Projekt und diesen Frieden von Code verwenden:

public static void Main() 
    { 
     // by default it will create an AutoCad2000 dxf version 
     DxfDocument dxf = new DxfDocument(); 
     // add your entities here 
     dxf.AddEntity(entity); 
     // save to file 
     dxf.Save(filename); 

     // load file 
     DxfDocument dxfLoad = DxfDocument.Load(filename); 
    } 

und lassen Sie mich wissen, ob Ihr Problem lösen.

wenn seine rohe Datei, die Sie in jeder Sprache wollen versuchen Sie dies:

Dim strTest = File.ReadAllText("your_german_file.txt", System.Text.Encoding.Default) 

oder

Dim reader As New StreamReader("C:\example.txt", System.Text.Encoding.Default) 

wegen dem, was @ Joel Coehoorn sagte

+0

Das erste Codebeispiel gibt die gesamte Datei als einzelne Zeile von Fragezeichen zurück. Aber was ich nicht verstehe, wenn ich den folgenden Code verwende, bekomme ich tatsächlich die Anzahl der Zeilen in der Datei: 'Dim Zeilen als neue Liste (von String) Wenn strOrgDxfFileName <> "" Dann lines.AddRange (ReadAllLines (strOrgDxfFileName)) End If lLines = Zeilen.Zahl ' Mit Ihrer zweiten Codezeile muss ich Codierung mit System.Text vorangestellt werden und ich bekomme einen Fehler auf "utf8". Wo wird die Zeichenfolge aus der DXF-Datei eingelesen? – BenS

+0

okay, was ist der Name der Umgebung, die Sie für die Entwicklung verwenden Sir – Michael

+0

Ich habe gerade meine Antwort bearbeitet – Michael