Avatar billede jb00797 Nybegynder
10. september 2007 - 17:15 Der er 7 kommentarer og
2 løsninger

Unicode? Problemer med tegn

Hej

Jeg er ved at lave et program der henter en side fra nettet, ved hjælp af InternetOpen, InternetOpenUrl og InternetReadFile.
Men problemet er at jeg har problemer hvis siden indeholder tegn som Æ, Ø og Å.
Har læst noget om jeg skal bruge unicode, men er det det jeg skal og i så fald hvordan kommer jeg i gang med det?

Mvh
Søren
Avatar billede nicer Nybegynder
10. september 2007 - 22:54 #1
Det er samme ved php scripting når du bruger mysql database. Der skal du også sætte Content="Unicode-8" i head og self selv i mysql DB'en hvis den skal vise det ordenligt... håber det kan hjælpe
Avatar billede arne_v Ekspert
11. september 2007 - 03:26 #2
Kan du uddybe "jeg har problemer hvis siden indeholder tegn som Æ, Ø og Å" ?

Hvis et af de danske bogstaver bliver til 2 bogstaver, så er det fordi du
henter UTF-8 og viser det som CP-1252. Det kan løses med en konvertering.
Avatar billede jb00797 Nybegynder
11. september 2007 - 08:42 #3
Nicer > Jeg forstår ikke helt hvad du mener, det er ikke en side jeg selv har lavet jeg henter, så kan ikke ændre noget på siden.

Arne_v > Ja det er når jeg henter en side der har UTF-8 encoding, men indeholder danske tegn, så bliver de til 2 bogstaver. HEr er et billede som viser det:
http://sieg.homelinux.org/img.png
Hvordan skal det konverteres?
Avatar billede arne_v Ekspert
12. september 2007 - 01:42 #4
Prøv utoa funktionen i nedenstående kode:

#include <stdio.h>
#include <string.h>

void atou(const char* sin, char *sout)
{
    int ix, i, v;
    ix = 0;
    for(i = 0; i <= strlen(sin); i++)
    {
        v = (unsigned char)sin[i];
        if(v < 128)
        {
            sout[ix] = v;
            ix++;
        }
        else
        {
            sout[ix] = 0xC0 | (v / 64);
            ix++;
            sout[ix] = 0x80 | (v % 64);
            ix++;
        }
    }
}

void utoa(const char* sin, char *sout)
{
    int ix, i, v, sav;
    ix = 0;
    for(i = 0; i <= strlen(sin); i++)
    {
        v = (unsigned char)sin[i];
        switch(v & 0xC0)
        {
            case 0xC0:
                sav = v & 0x3F;
                break;
            case 0x80:
                sout[ix] = (sav << 6) | (v & 0x3F);
                ix++;
                break;
            default:
                sout[ix] = v;
                ix++;
                break;
        }
    }
}

int main()
{
    char s1[] = "ABCabc123ÆØÅæøå";
    char s2[100];
    char s3[100];
    atou(s1, s2);
    utoa(s2, s3);
    printf("%s -> %s -> %s\n", s1, s2, s3);
    return 0;
}
Avatar billede arne_v Ekspert
12. september 2007 - 01:42 #5
Bemærk at koden ikke er perfekt - den virker kun med tegn 0-4095, men ingen problemer
med ÆØÅ.
Avatar billede segmose Nybegynder
13. september 2007 - 14:07 #6
Hej
  Jeg kan ikke lige se imaget, linket er broken, men når du ser det som ?? så kunne det tænkes at der hvor du displayer det skal have fortalt at det er UTF-8 så den ved det skal vise, evt. med den rigtige font.
Avatar billede arne_v Ekspert
27. januar 2008 - 05:25 #7
søren ?
Avatar billede jb00797 Nybegynder
22. marts 2008 - 22:45 #8
Undskyld vente tiden, kom helt fra det igen.
Programmet blev aldrig til noget, men arne_v læg et svar, for dine svar kan altid bruges ;), så gemmer jeg det til en dag hvor jeg skulle få brug for det.
Avatar billede arne_v Ekspert
22. marts 2008 - 22:46 #9
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester