Fejlfinding Unicode Problemer

Original: http://csharpindepth.com/Articles/General/DebuggingUnicode.aspx

Denne side beskriver, hvad de skal gøre i en meget specifik situation. Nemlig, du har fået nogle tegn data i ét sted (typisk en database), der har til at gå gennem forskellige trin, og derefter ender med at blive vist til brugeren (ofte på en webside). Desværre er nogle tegn, der ikke vises korrekt. På grund af de mange trin involveret, kan der opstå problemer på forskellige steder. Denne side har til formål at hjælpe dig med at finde ud af hvad der er galt enkelt og pålideligt.

Trin 1: Forstå det grundlæggende i Unicode

Hvis du føler dig tilpas med Unicode, tegnkodninger etc, er du velkommen til at springe dette trin. Dybest set, du har brug for at vide lidt om, hvad tegn er, og hvad konverteringer vil sandsynligvis blive anvendt på dem før de går langt videre. Se min artikel om emnet (og de artikler, det referencer) for mere information.

Trin 2: Prøv at identificere de mulige konverteringer involverede

Hvis du kan arbejde ud af, hvor tingene kan gå galt, er det meget lettere at derefter isolere, hvilken en det er. Også huske på, ikke bare hvordan du henter data, men hvordan data kom der i første omgang. (Nogle problemer jeg har set har været på grund af en gammel ansøgning Ingen problemer opstår, når det er bare denne brudte applikation, der får adgang til databasen skrive til og læse fra databasen på en forkert måde, men bugs annullere hinanden ud., Men tingene gå galt, når noget andet gør.) trin involveret kan vel indeholde hente data fra databasen, læse det fra en fil, sender den på tværs af en web-forbindelse, eller vise det på skærmen.

Trin 3: Kontroller data på hvert trin

Den første lektion her er ikke til at stole på noget, der forsøger at logge de tegndata som en sekvens af glyffer. I stedet bør du logger de tegndata som en sekvens af Unicode-værdier (heltal). For eksempel, hvis jeg havde en streng, der indeholder ordet “hej”, jeg ville vise den som “0068 0065 006c 006c 006f”. (Brug hex gør det lettere at kontrollere værdier mod de Unicode kode diagrammer senere.) For at opnå dette, gå gennem hvert tegn i strengen og vise det tegn, men du ville vise et heltal. For eksempel, her er en metode til at dumpe alle tegn i en streng til konsollen:

 

static void DumpString (string value)
{
    foreach (char c in value)
    {
        Console.Write(“{0:x4} “, (int)c);
    }
    Console.WriteLine();
}

 

Afhængig af din nøjagtige miljø, vil din metode til logning variere, men ved hjælp af noget som ovenstående bør give dig, hvad du har brug for. Min artikel om strygere giver en mere detaljeret fejlsøgning form.

Grunden til at gøre dette er, at det bliver fjernet problemer med skrifttyper, andre kodning spørgsmål osv Hvis du ikke kan logge selv plain ASCII hex cifre ordentligt, du er i en verden af ​​problemer alligevel – men du kan vel ikke være stand til at logge Unicode på en pålidelig måde, og som du allerede ved, du har fået nogle problemer på Unicode forsiden, er det værd at være sikker.

Nu er du nødt til at sikre, at der er en prøvesag for at bruge. Find nogle (helst små) eksempel på, hvor din ansøgning svigter, skal du vide præcis, hvad resultatet skal være, og log derefter det faktiske resultat ved hver af dine mulige problem point. (Nogle kan være ude af din kontrol, men normalt hvis du logger, så snart du modtager nogle data og lige før du sender nogle data, vil du finde problemet.)

Efter at have logget en problematisk streng, skal du kontrollere, om det ikke er, hvad det skal være. Det er her, Unicode kode diagrammer side kommer i. Du kan enten vælge, hvilke blokerer du mener det korrekte tegn er i, eller du kan søge efter din karakter alfabetisk. Kontroller, at hver karakter i strengen har sin rette Unicode-værdi. Så snart du finde et punkt i din ansøgning flow, hvor dataene karakter er beskadiget, bør du undersøge dette område af koden, finde ud af, hvorfor det er at blive ødelagt, og ordne det. Når du har fået det rigtige i hele applikationen flow, skal ansøgningen fungerer korrekt.

Konklusion

Ligesom så mange problemer i softwareudvikling, løsningen på fastsættelse af problemer med tekst normalt indebærer en “del og hersk” tilgang. Når du er sikker på hvert trin, bør du være i stand til at være sikker på det hele. Hvis du støder på særligt akavede eksempler, mens du arbejder ud af, hvad der går galt, vil jeg på det kraftigste råde dig til at skrive unit test, der dækker dem – både som dokumentation for, hvad der kan ske, og som et værn mod fremtidige regressioner.

Comments are closed.