none
Hilfe beim Convertieren (vermute von UTF8) RRS feed

  • Frage

  • Hallo VB Spezialisten,

    ich möchte einen String von UTF8 Convertieren, ich weis selbst noch nicht genau wie ich dieses Problem beschreiben soll.

    Bei mir wird folgender String eingelesen "M%c3%bchlberg+Ges.+%26+Co." dieser sollte aber
    "Mühlberg Ges. & Co." sein nun weis ich nicht wie ich das hinbekomme, ich hatte derweil weder mit der Encoding Klasse noch mit der UTF8Encoding Klasse erfolg.

    folgendes hat zum Beispiel nicht funktioniert

            Dim sEncode As String = "M%c3%bchlberg+Ges.+%26+Co."
            Dim sTest As String
            Dim code As New UTF8Encoding
            Dim arString(sEncode.Length) As Char
            Dim arByte() As Byte
            arString = sEncode.ToCharArray()
    
            arByte = code.GetBytes(arString)
            sTest = code.GetString(arByte)
            'sTest = UTF8Encoding.
    
            sTest = code.GetString(arByte)
            MessageBox.Show(sEncode & vbCrLf & sTest)
    Vielen Dank im Voraus


    Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter


    Montag, 10. Juni 2013 14:36

Alle Antworten

  • Hallo, Strings sind in .NET standartmäßig Unicode. Also 2 Bytes pro Zeichen. Woher hast du denn den String und bist du dir sicher, das es die Richtigen Kodierungen sind. Vielleicht hilft dir folgendes Snippet weiter:
    http://dotnet-snippets.de/snippet/string-in-byte-array-und-zurueck-wandeln/67

    Wenn du den String aus einer Datei ausließt, da kann man die Kodierung gleich mit angeben.


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets | Twitter
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
    Einen Konverter zwischen C# und VB.NET Code gibt es hier.

    Montag, 10. Juni 2013 14:52
    Moderator
  • ich arbeite an einem Plugin das in einer Programmumgebung aufgerufen wird und dieser String wird aus einer Eigenschaft aus der Programmumgebung ausgelesen

    Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter


            Dim sEncode As String = "M%c3%bchlberg+Ges.+%26+Co."
            Dim sTest As String
            Dim codeUTF8 As New UTF8Encoding
            Dim codeASCII As New ASCIIEncoding
            Dim codeUNI As New UnicodeEncoding
            Dim arString(sEncode.Length) As Char
            Dim arByte() As Byte
            arString = sEncode.ToCharArray()
    
            arByte = codeASCII.GetBytes(arString)
            sTest = codeUNI.GetString(arByte)
            'sTest = UTF8Encoding.
    
            'sTest = code.GetString(arByte)
            MessageBox.Show(sEncode & vbCrLf & sTest)

    so wird das nur chinesisch
    Montag, 10. Juni 2013 14:57
  • . Vielleicht hilft dir folgendes Snippet weiter:
    http://dotnet-snippets.de/snippet/string-in-byte-array-und-zurueck-wandeln/67


    Wenn ich den String in ein ByteArray gewandelt habe wie bekomme ich daraus wieder ein String?

    Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter

    Montag, 10. Juni 2013 14:58
  • Hallo Florian,

    Wenn ich den String in ein ByteArray gewandelt habe wie bekomme ich daraus wieder ein String?

    genau das steht doch im Link von Koopakiller!?

    In deinem Fall wäre es aber wohl sinnvoller, HttpUtility.UrlDecode( ... ) zu verwenden.

      http://msdn.microsoft.com/de-de/library/adwtk1fy.aspx

    Hierfür müsstest Du eine Referenz auf die System.Web.dll in dein Projekt einbinden.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 10. Juni 2013 15:07
    Moderator
  • Wird leider nicht von Windows 7 in der .Net Version 3.5 unterstüzt daran muss ich mich halten

    Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter

    Dienstag, 11. Juni 2013 06:35
  • Florian,

    das wird schon von Windows 7 und NET 3.5 unterstützt. Die Platformen, die angegeben sind, sind die Platformen welche mindestens vorhanden sein müssen.

    PS: Ich habe es auch getestet unter Win7 mit VS 2008 ;-)


    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Dienstag, 11. Juni 2013 07:27
  • Ich habe es derweil nicht geschafft aber ich kann diese Daten vielleicht anders herausbekommen,

    vielen Dank für die Hilfe


    Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter

    Dienstag, 11. Juni 2013 07:33
  • Also folgendes funktioniert:

            Dim s As String = "M%c3%bchlberg+Ges.+%26+Co."
            Dim r As String = Web.HttpUtility.UrlDecode(s)
            MsgBox(r)


    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Dienstag, 11. Juni 2013 07:37
  • Hallo Florian,

    Ich habe es derweil nicht geschafft aber ich kann diese Daten vielleicht anders herausbekommen,

    wenn Du uns verraten würdest, woran es bei dir scheitert, könnte man dir sicherlich auch helfen. Poste doch mal bitte die genaue und vollständige Fehlermeldung und die Codezeile, die den Fehler verursacht.

    Wie bereits geschrieben, musst Du eine Referenz auf die System.Web.dll in dein Projekt einbinden. Die Klasse HttpUtility ist im System.Web Namespace, der dürfte in deinem Projekt nicht standardmäßig importiert werden. System an sich schon, daher funktioniert der von Heslacher gepostete Aufruf direkt, bei meinem Beispiel müsstest Du entweder per "Imports System.Web" den Namespace importieren oder System.Web.HttpUtility.UrlDecode( ... ) schreiben. (Allerdings ging ich davon aus, dass das klar ist, spät. nach dem Lesen des MSDN Eintrags, den ich verlinkt hatte)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 11. Juni 2013 09:11
    Moderator
  • Ich habe keinen Fehler bekommen, ein String der eingelesen wird falsch angezeigt und ich habe vermutet das es an einer Kodierung liegt. PS ich habe beim Import Fehler gemach :) Vielen Dank für den Hinweis mit den Plattformen das habe ich falsch verstanden.

    Vor der Klasse habe ich volgendes angefügt

    Imports System.Web

    Der Fehler der mir angezeigt wird beim Aufruft von Web.HttpUtility.UrlDecode() wird mir Folgender Fehler angezeigt:

    HttpUtility ist kein Member von "Web"

    Zu Meiner Neuen Lösung, daran Arbeite ich nocht und diese weicht auch komplett vom Thema ab


    Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter



    Dienstag, 11. Juni 2013 09:46
  • Hallo Florian,

    wenn die gezeigte Fehlermeldung erscheint, hast Du die DLL nicht als Verweis in deinem Projekt. Mach das doch bitte mal (hatte ich dir ja oben schon zweimal geschrieben), dann sollte das auch problemlos funktionieren.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 11. Juni 2013 09:58
    Moderator
  • Liebe Spzialisten

    bei mir wird der Verweis nicht angezeigtVerweis
    Ich hatte bereits alle Verweise mit System.Web eingefügt.

    ich möchte jetzt aber niemanden aufhalten, ich habe die  gesuchten Inhalte anders erreicht.

    Dass kann ich euch leider nicht ganz erklären da ich an einem Plugin für ein Programm arbeite und ich da benutztdefinierte Klassen benutzen muss.

    Vielen Dank für die Hilfe und die Neuen Sachen die ich hier wieder gelernt habe.


    Bitte klärt mich über falsche Fachbegriffe auf Beste Grüße Florian Reiter


    Dienstag, 11. Juni 2013 12:22
  • Florian,

    wenn Du auf Dein Projekt im Projektexplorer klickst und dann rechte Maustaste Eigenschaften kannst Du auf dem Reiter Verweise im unteren Teil der Seite System.Web aktivieren.


    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Dienstag, 11. Juni 2013 12:25
  • Hallo Hannes,

    wenn Du auf Dein Projekt im Projektexplorer klickst und dann rechte Maustaste Eigenschaften kannst Du auf dem Reiter Verweise im unteren Teil der Seite System.Web aktivieren.

    das hat aber nichts mit dem Verweis zu tun, sondern nur mit dem Import des Namespace.

    @Florian: Klick bitte auf den Spaltenheader "Komponentenname", dann werden die Elemente nach dem Namen sortiert. In der Standardansicht ist das eine andere Sortierung, da musst Du dann weitersuchen, irgendwo recht weit unten ist dann auch System.Web zu finden (nur System.Web, die anderen Komponenten wie System.Web.Entity, ... bringen da nichts)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 11. Juni 2013 12:54
    Moderator
  • Stefan,

    da hast Du natürlich Recht. Ich war nur ein wenig irritiert, da ich (obwohl ich die Liste sortiert hatte ) System.Web auch nicht finden konnte. Allerdings hatte mein Testprojekt auch das Zielframework 4.0 Client Profile unter welchem System.Web als Verweis nicht auftaucht. Ich habe in letzter Zeit einfach zuviel mit Java/Netbeans gemacht ;-)


    Hannes

    If you have got questions about this, just ask.

    In a perfect world,
    users would never enter data in the wrong form,
    files they choose to open would always exist
    and code would never have bugs.

    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/

    Dienstag, 11. Juni 2013 13:07