fgetws
Nesvacil Jiri
nesvacil na posys.eu
Úterý Srpen 30 12:58:16 CEST 2022
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
Další informace o konferenci Hw-list