Het omzetten van speciale charactes zoals ü en à terug naar hun oorspronkelijke latijnse alphbet collega ‘ s in C#

Ik heb een export van een MySQL database die lijkt te hebben was het de codering verward enigszins in de tijd en bevat een mix van HTML char codes zoals & uuml; en meer problematisch tekens die dezelfde letters, zoals ü en Ã. Het is mijn taak om te zorgen voor wat consistentie terug naar het bestand en krijgt van alles in de juiste latijnse karakters gebruiken, bijvoorbeeld ú en ó.

Een voorbeeld van het type string ik ben omgaan met

Desinfektionslösungstücher für Flächen

Die moet gelijk zijn aan

50 Tattoo Desinfektionsl ö    sungst ü    cher f ü    r Fl ä    chen 
50 Tattoo Desinfektionsl ö sungst ü cher f ü r Fl ä chen

Is er een methode beschikbaar is in C#/.Netto 4.5 dat zou met succes re-encoden van de wil van ü en à te UTF-8?

Ander wat de aanpak zou zijn aan te raden?

Ook is het lid karakter in het bovenstaande voorbeeld string een effectief lid karakter of een deel van een andere combinatie?

Ik heb een lookup-tabel in het geval van hoeft te doen vinden en vervangen die hieronder, maar ik ben niet zeker hoe compleet het is.

É -> É
“ -> "
†-> "
Ç -> Ç
à -> Ã
é, 
à -> ú -> ú
• -> -
Ø -> Ø
õ -> õ
í -> í
â -> â
ã -> ã
ê -> ê
á -> á
é -> é
ó -> ó
– -> 
ç -> ç
ª -> ª
º -> º
à  -> à
  • Punt van classicus: ü en à niet “speciale tekens” precies, maar Mojibake.
  • ped weg… interessant
  • Btw je post is een beetje misleidend, na het herstellen van de gegevens kreeg ik Desinfektionslösungstücher für Flächen, die lijkt te kloppen maar in uw verwachte resultaat u hebt ruimtes.
  • Ja in de ruimtes, zijn er slechts om te illustreren wat kaarten om wat…
  • +1 voor de tafel. kunt uitbreiden!
InformationsquelleAutor Gga | 2013-02-20

 

5 Replies
  1. 21

    Nou, ten eerste, als de gegevens zijn gedecodeerd met behulp van een verkeerde codering, is het waarschijnlijk dat sommige van de tekens die zijn onmogelijk om te herstellen. Het ziet er uit als UTF-8-gegevens die onjuist gedecodeerd met behulp van een 8-bits codering.

    Er is geen ingebouwde methode om gegevens te herstellen als deze, want het is niet iets dat je normaal doet. Er is geen betrouwbare manier voor het decoderen van de gegevens, want het is al gebroken.

    Wat je kunt proberen, is om het coderen van de gegevens, en decoderen met behulp van een verkeerde codering weer net andersom:

    byte[] data = Encoding.Default.GetBytes(input);
    string output = Encoding.UTF8.GetString(data);

    De Encoding.Default maakt gebruik van de huidige ANSI-codering voor uw systeem. U kunt proberen een aantal verschillende coderingen er, en die geeft het beste resultaat.

    • Bedankt, ik denk dat je theorie dat de gegevens kunnen worden teruggevorderd zou kunnen worden ingevoerd. Ik heb gebroken snaar zo… 50 Tattoo Desinfektionsl ö sungst ü cher f ü r Fl ä chen — en — 50 Tattoo Desinfektionsl ö sungst ü cher f ü r Fl ä chen. dus ik weet wat er moet worden weergegeven waar maar toch kan zetten
    • Uw code in combinatie met de bevindingen van @pawlakppp het probleem opgelost dus met dank aan jullie beiden.
    • Eventueel de python 3 gelijk: s.encode('raw_unicode_escape').decode('utf8')
  2. 14

    De gegevens slechts gedeeltelijk hersteld door Windows-1252 codering met 5 niet toegewezen slots. Een aantal wijzigingen van de Windows-1252 vul deze met controle
    tekens, maar die maken het niet te posten in Stackoverflow. Indien gewijzigd
    Windows-1252 is gebruikt, kunt u volledig te herstellen zolang je niet verliezen
    de verborgen tekens in copy-pasta.

    Is er ook de niet-spatie teken dat wordt genegeerd of wordt omgezet in een ruimte, meestal met copypastes, maar dat is niet een probleem zijn wanneer u te maken met bytes direct.

    De misencoding misbruik van deze string heeft doorlopen is:

    UTF-8 -> Windows-1252 -> UTF-8 -> Windows-1252

    Te herstellen, hier is een voorbeeld:

    String a = "Desinfektionslösungstücher für Flächen";
    Encoding utf8 = Encoding.GetEncoding(65001);
    Encoding win1252 = Encoding.GetEncoding(1252);
    
    string result = utf8.GetString(win1252.GetBytes(utf8.GetString(win1252.GetBytes(a))));
    
    Console.WriteLine(result);
    //Desinfektionslösungstücher für Flächen
    • Bedankt, ik zal proberen uit die benadering.
  3. 4

    Het is waarschijnlijk windows-1252 gecodeerde tekenreeks die je leest als UTF-8.

    Als Guffa vermelde gegevens is beschadigd.

    Laat een kijkje nemen op bytes:

    ö -> C3B6 in UTF8

    in windows-1252
    C3 ->Ã
    B6 ->¶

    dus ö ->ö

    wat over al deze “ƒÂ”:

    ƒ ->83
    Â ->C2

    Eerlijkheid, ik weet niet waarom ze verschijnen, maar u kunt proberen wissen hen en doen wat de conversies Guffa vermeld. Veel geluk

    • Bedankt, ik ben volgens dezelfde lijnen van het onderzoek zelf en hebben verwijderd “ƒÂ”. Een opnieuw exporteren van de gegevens heeft verwijderd en draaide de A-hoeden om Een-tildes die goed is, dan lijkt er een duidelijke conversie lay-out hier: i18nqa.com/debug/utf8-debug.html
  4. 0

    Ik heb ook last van char probleem voor.
    Oplossing:

    Mijn .(cs)html-bestand is UTF-8; ik omgezet naar UTF-8Y (UTF-8 met een BOM).

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *