Kodowanie polskich znakow

0

Jak zmusic C++ Buildera aby pokazal mi jakie jest kodowanie polskich znakow w otwieranym pliku txt ? [???]

0

Przeanalizowalem sobie kod ktory zostal mi zapodany i chcialme go wy<ort>kozystac</ort> do swoich potrzeb ale cos chyba skopalem poniewaz jesl idobrze zrzumialme to programik mial zliczac ilosc wystepowania danego znaku w tekscie czyli przeanalizowac caly tekst a pozniej porownac z tablica w ktorej sa dane odnosnie kodowania.

Dziabnolem sobie cos w tym stylu :

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int st[2][18]=
{/*iso-8859-2*/  {175,172,166,211,209,163,202,198,161,191,188,182,243,241,179,234,230,177},

/*cp1250*/      {175,143,140,211,209,163,202,198,165,191,159,156,243,241,179,234,230,185}};




  M2->Clear();
  M3->Clear();
  //---------------------- Statystyka pliku --------------------------------------
  int iloscZnakow[256];
  memset(iloscZnakow,0,256*4);
  TFileStream *file = new TFileStream(OD->FileName,fmOpenRead+fmShareDenyNone);
  char* buf = new char[1024*1024];

  int k;
  while ((k=file->Read(buf,1024*1024))!=0) {for (int i=0;i<k;iloscZnakow[buf[i++]]++); }
  file->Free();

  for(int i=0;i<256;i++)
  {
   M2->Lines->Add(IntToStr(i)+" <---> "+IntToStr(iloscZnakow[i]));
  }
//---------------------------Suma kodu -------------------------------------
  int iso=0,cp=0;


  for(int i=0;i<18;i++)
  {
  iso=iso+iloscZnakow[st[0][i]];
  cp=cp+iloscZnakow[st[1][i]];

  }
  M3->Lines->Add("System plikow :");
  M3->Lines->Add(iso);
  M3->Lines->Add(cp);
 


}

W moim przykladzie tablica st jest wy<ort>kozystywana</ort> do podawania indeksu ktory ma byc wy<ort>kozystwany</ort> w dodawaniu tablicy ilosZnakow. niby wszystko dziala ale jak sprawdzam sobie czy to dziala to dostaje jakies wartosci sciagnelem sobie inny program ktory koduje w roznych systemch i po zakodowaniu do iso-8859-2 w tym programiku u mnie nie wykrywa go jako iso. Jak sprobuje wykryc kodowanie tamtym programikiem to napisze ze jest to iso. Czy tkos mi powie co zle kombinuje ?

0

Odpal bcb wybierz file->new->console wizard->console->finish. Wklej to co masz poniżej i odpal....

#include <stdio.h>
#include <stdlib.h>

int main(){
  int i=char(175); // pierwszy znak w obu tablicach
  printf("%d\n",i);
  system("pause > nul");
  return 0;
}

Obejrzyj wynik, obejrzyj sobie jeszcze raz dokładnie to co wrzuciłem do faq. Nie, za słabo, jeszcze dokładniej. Zwróć szczególną uwagę na linijkę:

typedef unsigned char uchar; // iniezależnic sie od ustawien kompilatora. zawsze unsigned char

oraz na:

uchar buf[1024];

i w końcu na:

long znaki[256];

I sam sie klepnij w czoło... Mocno :]

// [diabel] tkwi w szczegółach i bsd

1 użytkowników online, w tym zalogowanych: 0, gości: 1