Avatar billede repsak Nybegynder
09. maj 2003 - 11:43 Der er 5 kommentarer og
1 løsning

Dansk tegnsæt

Jeg sidder og roder med at skulle læse text-linjer ind fra en fil og derefter udskrive den i et konsol-vindue (ganske simpelt), men text-filen indeholder æ, ø og å, og de bliver udskrevet som nogle underlige kruseduller. Hvordan retter jeg det?

ifstream file("c:\\bad.txt",ios::in);
Avatar billede arne_v Ekspert
09. maj 2003 - 11:51 #1
Du skal nok have skrevet en lille funktion der kan konvertere
fra ISO-8859-1 til CodePage 850.

Jeg har en liggende men kan først komme til den i aften.

:-(
Avatar billede repsak Nybegynder
09. maj 2003 - 11:54 #2
Det undrer mig ikke ;-)
det ville sgu være cool hvis du kunne offentliggøre den!
Avatar billede arne_v Ekspert
09. maj 2003 - 18:01 #3
Her er til CP850:

#include <stdio.h>

//**********************************************************************
//
// (ISO-8859-1/IsoLatin1/CP-819 -> CP-850/PC-8-ML) conversion
//
// Notes:
//  0-127 left unchanged
//  128-255 converted (to zero if no equivalence)
//
//**********************************************************************

unsigned char cscvt_to_cp850_table[256] = {
  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,173,189,156,207,190,221,245,249,184,166,174,170,240,169,238,
248,241,253,252,239,230,244,250,247,251,167,175,172,171,243,168,
183,181,182,199,142,143,146,128,212,144,210,211,222,214,215,216,
209,165,227,224,226,229,153,158,157,235,233,234,154,237,231,225,
133,160,131,198,132,134,145,135,138,130,136,137,141,161,140,139,
208,164,149,162,147,228,148,246,155,151,163,150,129,236,232,152
};

void cscvt_to_cp850(char *s1,char *s2)
{
  int i;
  strcpy(s2,s1);
  for(i=0;i<strlen(s1);i++) s2[i]=cscvt_to_cp850_table[(unsigned char)s2[i]];
  return;
}

int main()
{
  char win[] = "ABCabcÆØÅæøå123";
  char dos[100];
  cscvt_to_cp850(win,dos);
  printf("%s -> %s\n",win,dos);
}
Avatar billede arne_v Ekspert
09. maj 2003 - 18:02 #4
Hvis ikke din DOS box bruger Code Page 850 men f.eks. 437, så får
du problemer med Ø som bliver til Yen og cent.
Avatar billede repsak Nybegynder
10. maj 2003 - 17:42 #5
Det der kalder jeg klasse! Det virker med også med Ø.
Mange tak for hjælpen :-D
Avatar billede repsak Nybegynder
10. maj 2003 - 17:44 #6
jeg er ikke så meget inde i C++ at jeg kan forklare det, men jeg skulle lige typecaste (signed):
  for(i=0 ; i<(signed)strlen(s1) ; i++)
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