fgetws

Michal Grunt michal.grunt na gmail.com
Pátek Září 2 14:36:37 CEST 2022


Tak je to ještě trochu jinak... už to chápu. Na wiki jsem to viděl už
dříve, ale asi jsem se v tom zamotal jinde. Už mi to funguje. Díky.

Dne st 31. 8. 2022 19:06 uživatel Pavel Hudeček <edizon na seznam.cz> napsal:

> 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
>> >>> Hw-list na list.hw.cz
>> >>> http://list.hw.cz/mailman/listinfo/hw-list
>> >>> _______________________________________________
>> >>> HW-list mailing list  -  sponsored by 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
>> >> Hw-list na list.hw.cz
>> >> http://list.hw.cz/mailman/listinfo/hw-list
>> > _______________________________________________
>> > HW-list mailing list  -  sponsored by 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
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.czHw-list na list.hw.czhttp://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.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/20220902/6fe345c3/attachment.htm>


Další informace o konferenci Hw-list