Magyar betűk

Kezdőlap Fórumok Vegyes gondok Magyar betűk

10 bejegyzés megtekintése - 41-50 / 69
  • Szerző
    Bejegyzés
  • #2151483
    pointux
    Felhasználó

      „Tehát a tanulság: ő még jól megkapja.”
      Ezen ne csodálkozz, hiszen ez csak egy bináris adat.
      Azt kell megkeresni, ami a bináris adatból text-et csinál.
      De nem ír ki konzolra semmi hibát? (Vagy nem lehet valami debug sz@rral így leforgatni…)

      #2151484
      pointux
      Felhasználó

        „Tehát a tanulság: ő még jól megkapja.”
        Ezen ne csodálkozz, hiszen ez csak egy bináris adat.
        Azt kell megkeresni, ami a bináris adatból text-et csinál.
        De nem ír ki konzolra semmi hibát? (Vagy nem lehet valami debug sz@rral így leforgatni…)

        #2151485
        uzsolt
        Felhasználó

          Nem találtam semmi debug-os opciót. Aztán péntek délután még tovább mentem, megnéztem a draw_text függvényt is. Ő a cairo_show_text függvényt hívja meg. A második paramétere „gyanús”, azaz „const char *utf8”.
          Ezután LC_ALL=hu_HU.utf8, a vasárnap (mai nap) szót már utf8-cal írja ki, ezután

          Code:
          echo 0 widget_tell tb_gmail áom | awesome-client

          És megjelent az „álom”!
          Szóval itt az utf8-cal lesz gond, márminthogy a cairo nem utf8-kódolással kapja meg, és innentől kifekszik…

          #2151486
          uzsolt
          Felhasználó

            Nem találtam semmi debug-os opciót. Aztán péntek délután még tovább mentem, megnéztem a draw_text függvényt is. Ő a cairo_show_text függvényt hívja meg. A második paramétere „gyanús”, azaz „const char *utf8”.
            Ezután LC_ALL=hu_HU.utf8, a vasárnap (mai nap) szót már utf8-cal írja ki, ezután

            Code:
            echo 0 widget_tell tb_gmail áom | awesome-client

            És megjelent az „álom”!
            Szóval itt az utf8-cal lesz gond, márminthogy a cairo nem utf8-kódolással kapja meg, és innentől kifekszik…

            #2151487
            zoltan22
            Felhasználó

              Valoban:
              http://cairographics.org/manual/cairo-Text.html#cairo-show-text

              Eloszor utf8-ra kellene atalakitani a szoveget. Itt van egy pelda-kodreszlet: http://www.triptico.com/software/unicode.html#converting_posix_locale_strings_into_wchar_t_(c)

              Ha ezt belekakod a programba, es a draw_text-ben uft8-ra alakitod vele kirajzolas elott a karakterlancot, mukodnie kellene.

              #2151488
              zoltan22
              Felhasználó

                Valoban:
                http://cairographics.org/manual/cairo-Text.html#cairo-show-text

                Eloszor utf8-ra kellene atalakitani a szoveget. Itt van egy pelda-kodreszlet: http://www.triptico.com/software/unicode.html#converting_posix_locale_strings_into_wchar_t_(c)

                Ha ezt belekakod a programba, es a draw_text-ben uft8-ra alakitod vele kirajzolas elott a karakterlancot, mukodnie kellene.

                #2151489
                pointux
                Felhasználó

                  na most elvileg két megoldás van:
                  1) LC_ALL=…utf… (ezután minden program utf-et vár; a nem utf-es kódolású nem latin karakterek illegálisak)
                  2) LC_ALL=…nem utf… (ezek után minden program 1 byte-os karaktert vár; a nem latin kódolás nem lesz illegális, legfeljebb nem ugyanaz a betű jelenik, meg, ha a körny változó és paraméter kódolása nem ugyanaz, illetve utf paraméter esetén két karakter fog megjelenni)

                  #2151490
                  pointux
                  Felhasználó

                    na most elvileg két megoldás van:
                    1) LC_ALL=…utf… (ezután minden program utf-et vár; a nem utf-es kódolású nem latin karakterek illegálisak)
                    2) LC_ALL=…nem utf… (ezek után minden program 1 byte-os karaktert vár; a nem latin kódolás nem lesz illegális, legfeljebb nem ugyanaz a betű jelenik, meg, ha a körny változó és paraméter kódolása nem ugyanaz, illetve utf paraméter esetén két karakter fog megjelenni)

                    #2151491
                    uzsolt
                    Felhasználó
                      zoltan22 wrote:
                      Valoban:
                      http://cairographics.org/manual/cairo-Text.html#cairo-show-text

                      Eloszor utf8-ra kellene atalakitani a szoveget. Itt van egy pelda-kodreszlet: http://www.triptico.com/software/unicode.html#converting_posix_locale_strings_into_wchar_t_(c)

                      Ha ezt belekakod a programba, es a draw_text-ben uft8-ra alakitod vele kirajzolas elott a karakterlancot, mukodnie kellene.

                      Nem megy, sajna. A példa szerintem rossz, mert egy szimpla progiba beraktam:

                      Code:
                      #include
                      #include
                      #include

                      wchar_t * locale_to_wchar(char * str)
                      {
                          wchar_t * ptr;
                          size_t s;

                          /* first arg == NULL means ‘calculate needed space’ */
                          s = mbstowcs(NULL, str, 0);

                          /* a size of -1 is triggered by an error in encoding; never
                      *        happen in ISO-8859-* locales, but possible in UTF-8 */
                          if(s == -1)
                              return(NULL);

                          /* malloc the necessary space */
                          if((ptr = (wchar_t *)malloc((s + 1) * sizeof(wchar_t))) == NULL)
                              return(NULL);
                              printf(„%dn”,s);

                          /* really do it */
                          mbstowcs(ptr, str, 100);

                          /* ensure NULL-termination */
                          ptr[s] = L”;
                        /* remember to free() ptr when done */
                          return(ptr);
                      }

                      void main () {
                              char *str;
                              wchar_t *uni;

                              setlocale(LC_ALL, „hu_HU”);
                              str=malloc(300);
                              str=”ödön”;
                              uni=locale_to_wchar(str);
                              if (uni==NULL) { printf(„nulln”); } else {printf(„%sn”,uni);}
                      }

                      Kiírja, hogy 4 hosszú az ödön, de csak egy „ö” betűt nyom ki.

                      Az LC_ALL=…utf… nem jó, mivel ekkor valami rejtélyes ok miatt a tasklist-ekben SEMMI nem jelenik meg, még akkor se, ha nincs benne semmi fura karakter. A sima szövegdobozokba küldött szövegek jól megjelennek.
                      Szóval a zoltan22 által ajánlott megoldást akarnám én megvalósítani…

                      #2151492
                      uzsolt
                      Felhasználó
                        zoltan22 wrote:
                        Valoban:
                        http://cairographics.org/manual/cairo-Text.html#cairo-show-text

                        Eloszor utf8-ra kellene atalakitani a szoveget. Itt van egy pelda-kodreszlet: http://www.triptico.com/software/unicode.html#converting_posix_locale_strings_into_wchar_t_(c)

                        Ha ezt belekakod a programba, es a draw_text-ben uft8-ra alakitod vele kirajzolas elott a karakterlancot, mukodnie kellene.

                        Nem megy, sajna. A példa szerintem rossz, mert egy szimpla progiba beraktam:

                        Code:
                        #include
                        #include
                        #include

                        wchar_t * locale_to_wchar(char * str)
                        {
                            wchar_t * ptr;
                            size_t s;

                            /* first arg == NULL means ‘calculate needed space’ */
                            s = mbstowcs(NULL, str, 0);

                            /* a size of -1 is triggered by an error in encoding; never
                        *        happen in ISO-8859-* locales, but possible in UTF-8 */
                            if(s == -1)
                                return(NULL);

                            /* malloc the necessary space */
                            if((ptr = (wchar_t *)malloc((s + 1) * sizeof(wchar_t))) == NULL)
                                return(NULL);
                                printf(„%dn”,s);

                            /* really do it */
                            mbstowcs(ptr, str, 100);

                            /* ensure NULL-termination */
                            ptr[s] = L”;
                          /* remember to free() ptr when done */
                            return(ptr);
                        }

                        void main () {
                                char *str;
                                wchar_t *uni;

                                setlocale(LC_ALL, „hu_HU”);
                                str=malloc(300);
                                str=”ödön”;
                                uni=locale_to_wchar(str);
                                if (uni==NULL) { printf(„nulln”); } else {printf(„%sn”,uni);}
                        }

                        Kiírja, hogy 4 hosszú az ödön, de csak egy „ö” betűt nyom ki.

                        Az LC_ALL=…utf… nem jó, mivel ekkor valami rejtélyes ok miatt a tasklist-ekben SEMMI nem jelenik meg, még akkor se, ha nincs benne semmi fura karakter. A sima szövegdobozokba küldött szövegek jól megjelennek.
                        Szóval a zoltan22 által ajánlott megoldást akarnám én megvalósítani…

                      10 bejegyzés megtekintése - 41-50 / 69
                      • Be kell jelentkezni a hozzászóláshoz.