fgetws

Pavel Hudeček edizon na seznam.cz
Středa Srpen 31 19:06:04 CEST 2022


Velmi hezky je to vidět v tab. zde:
https://cs.wikipedia.org/wiki/UTF-8

PH

Dne 31.08.2022 v 18:32 Michal Grunt napsal(a):
> Děkuji za info.
>
> Jestli to dobře chápu a podle toho co jsem si o tom přečetl tak utf-8 
> znak začíná znakem 128 a za ním jsou 128+. Pokud je znak vicebajtovy 
> tak je to 128 128+ 128+ atd. Pokud jdou po sobě dva utf-8 znaky ("ěř" 
> třeba) tak je to 128 128+ 128 128+. Je to tak?
>
> Dne út 30. 8. 2022 12:58 uživatel Nesvacil Jiri <nesvacil na posys.eu> 
> napsal:
>
>     utf-8 se prave encoduje do ruzne delky. Pouziva se strlen na vraceni
>     delky v bytech. Je prave problem v cteni z stream, kde potrebujete
>     vratit cely znak a ne v pulce.
>
>     Na utf-16 a podobne kodovani zapominame umyslne, je to prezitek.
>
>     lua by Vam na to mela bezet v pohode. Uvnitr je vse utf-8, delku
>     vraci
>     pocet bytu.
>
>     golang se kompiluje do c. To co ma navic je take to reseni s
>     bufferem a
>     stringy.
>
>     Jirka
>
>     Dne 30.08.2022 v 10:09 Michal Grunt napsal(a):
>     > Tak jsem to rozlousknul. Ale stejně v tom mám zmatek snad ještě
>     větší
>     > než před tím...
>     >
>     > Problém byl v tom, že se program spouštěl po bootu jako služba
>     > (znakový výstup na konzoli - malý grafický LCD) a asi neměl k
>     > dispozici správné systémové proměnné "locale" (a vůbec nemělo
>     vliv co
>     > jsem nastavoval přímo v programu příkazem setlocale() ). Locale jsem
>     > samozřejmě nastavené měl, když jsem byl přihlášený. Program spuštěný
>     > jako služba toto asi neměl k dispozici (nejspíš je nutné locale
>     > nastavit nějak globálně). Když jsem v nastavení služby upravil
>     > spouštění na "ExecStart=env LANG=cs_CZ.UTF-8
>     /home/pi/mujprogram" tak
>     > už to šlape, čeština se zobrazuje a to i bez wchar_t prostě jenom s
>     > normálním char přes to, že jsou české znaky dvoubajtové což
>     samozřejmě
>     > dělá bordel třeba u strlen... Ideální by to asi bylo vyřešit pomocí
>     > wchar, ale na tom mi havaroval fgetws. Zkusím si ještě pohrát s
>     > fshort-wchar a mrknu na tu dělitelnost délky bufferu. Ale co
>     když zase
>     > bude něco co bude zobrazovat východní jazyky, které jsou snad 4
>     > bajtové...
>     >
>     > "C" jsem zvolil kvůli rychlosti (běží to na RPi Zero 1, které není
>     > zrovna nejrychlejší nehledě na to, že to běží na baterii kde
>     minimální
>     > zátěž CPU = delší výdrž, Python byl v tomto tragický) i když jsou s
>     > tím spojeny některé obtíže.
>     >
>     > po 29. 8. 2022 v 21:58 odesílatel Michal Vanka
>     <junk.mv na gmail.com> napsal:
>     >
>     >> Jestli to neni tim, ze kodovani UTF-8 neni 16 bitove...
>     >> Viz:
>     >> https://en.wikipedia.org/wiki/UTF-8
>     >>
>     >>
>     >> On Mon, Aug 29, 2022 at 9:31 PM <spam na nagano.cz> wrote:
>     >>> Pripadne mi podezrela kombinace wchar_t a utf8. Zkuste vyhodit
>     vse 16bitove.
>     >>> L.
>     >>>
>     >>> Sent from MailDroid
>     >>>
>     >>> -----Original Message-----
>     >>> From: Michal Grunt <michal.grunt na gmail.com>
>     >>> To: HW-news <hw-list na list.hw.cz>
>     >>> Sent: po, 29 srp 2022 20:27
>     >>> Subject: fgetws
>     >>>
>     >>> Jsem v koncích. Lámu si s tím hlavu už několik hodin. Po
>     překladu (gcc
>     >>> na RPi) a spuštění to hlásí chybu: Neoprávněný přístup do paměti
>     >>> (SIGSEGV)
>     >>>
>     >>> Havaruje to na fgetws...
>     >>>
>     >>> Příkaz "mpc status | head -n 1" vrátí název stanice nebo
>     interpreta a
>     >>> to v UTF 8 formátu (diakritika).
>     >>>
>     >>> Co dělám špatně? Zkoušel jsem nad tím i usilovně přemýšlet
>     :-), ale
>     >>> ani to nepomohlo. Metoda pokus omyl (co najdu po internetu) je
>     také
>     >>> selhala. Níže je uveden jeden z mnoha pokusů.
>     >>>
>     >>> Blbý je, že se to ani nedá nějak pořádně debugovat nebo to
>     neumím (na
>     >>> RPi a přístup přes SSH na konzoli).
>     >>>
>     >>> Děkuji
>     >>> MG
>     >>>
>     >>> #define BUF_LEN 255
>     >>> static wchar_t szwBuffer[BUF_LEN];
>     >>>
>     >>> setlocale(LC_CTYPE, "en.UTF-8");
>     >>>
>     >>> fp = popen( "mpc status | head -n 1", "r");
>     >>> if (fp == NULL) {
>     >>>     printf("Failed to run command\n" );
>     >>>     exit(1);
>     >>> }
>     >>>
>     >>> fwide(fp,1);
>     >>> while (fgetws(szwBuffer, sizeof(szwBuffer)/sizeof(wchar_t), fp) !=
>     >>> (wchar_t *)NULL);
>     >>>
>     >>> wprintf( L"%s\n", szwBuffer);
>     >>> _______________________________________________
>     >>> HW-list mailing list  -  sponsored by www.HW.cz <http://www.HW.cz>
>     >>> Hw-list na list.hw.cz
>     >>> http://list.hw.cz/mailman/listinfo/hw-list
>     >>> _______________________________________________
>     >>> HW-list mailing list  -  sponsored by www.HW.cz <http://www.HW.cz>
>     >>> Hw-list na list.hw.cz
>     >>> http://list.hw.cz/mailman/listinfo/hw-list
>     >> _______________________________________________
>     >> HW-list mailing list  -  sponsored by www.HW.cz <http://www.HW.cz>
>     >> Hw-list na list.hw.cz
>     >> http://list.hw.cz/mailman/listinfo/hw-list
>     > _______________________________________________
>     > HW-list mailing list  -  sponsored by www.HW.cz <http://www.HW.cz>
>     > Hw-list na list.hw.cz
>     > http://list.hw.cz/mailman/listinfo/hw-list
>     _______________________________________________
>     HW-list mailing list  -  sponsored by www.HW.cz <http://www.HW.cz>
>     Hw-list na list.hw.cz
>     http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20220831/16b1d861/attachment.htm>


Další informace o konferenci Hw-list