🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

4 total messages Started by Borneq Sun, 05 Jun 2016 12:16
Usprawnienie klasy do Uniocode
#308653
Author: Borneq
Date: Sun, 05 Jun 2016 12:16
7 lines
1230 bytes
https://github.com/borneq/utfclib
- jak szybko i czytelnie dodać ograniczenie na wielkość bufora wyjściowego?
- w pętli dopóki pierwszy bajt czy słowo grupy opisującej znak jest 
różne od 0, a co gdy znak zero będzie błędnie w środku grupy?
- jaką wielkość bufora 16-bitowego przydzielać dla wejściowego utf8 i 
odwrotnie?
- w jaki dobry, statystyczny sposób określić czy tekst bez BOM jest UTF8?
Re: Usprawnienie klasy do Uniocode
#308654
Author: Borneq
Date: Sun, 05 Jun 2016 12:49
26 lines
1744 bytes
W dniu 05.06.2016 o 14:16, Borneq pisze:
> https://github.com/borneq/utfclib
> - jak szybko i czytelnie dodać ograniczenie na wielkość bufora wyjściowego?
> - w pętli dopóki pierwszy bajt czy słowo grupy opisującej znak jest
> różne od 0, a co gdy znak zero będzie błędnie w środku grupy?
> - jaką wielkość bufora 16-bitowego przydzielać dla wejściowego utf8 i
> odwrotnie?
> - w jaki dobry, statystyczny sposób określić czy tekst bez BOM jest UTF8?


Przy okazji - jak printfem wypisać znaki Unicode na konsolę lub do
pliku?
	char buf[1000];
	wchar_t wbuf[1000];
	while (!feof(fp))
	{
		fgets(buf, 1000, fp);
		UTF::utf8To16(buf, wbuf);
		printf("%s",buf);
		printf("%S", wbuf);
	}
	fclose(fp);

%s oczywiście jest źle
duże S: %S lub %ls zaczyna wypisywać ale przerywa po napotkaniu 
pierwszego znaku nie mieszczącego się w jednym bajcie.
Re: Usprawnienie klasy do Uniocode
#308648
Author: Borneq
Date: Sun, 05 Jun 2016 12:59
5 lines
1136 bytes
W dniu 05.06.2016 o 14:49, Borneq pisze:
> duże S: %S lub %ls zaczyna wypisywać ale przerywa po napotkaniu
> pierwszego znaku nie mieszczącego się w jednym bajcie.

wprintf(L"%s", wbuf) - nie przerywa ale wpisuje znaki ? dla uniocode
Re: Usprawnienie klasy do Uniocode
#308651
Author: keiichi
Date: Tue, 07 Jun 2016 15:41
32 lines
2309 bytes
W dniu 2016-06-05 o 14:49, Borneq pisze:
> W dniu 05.06.2016 o 14:16, Borneq pisze:

>> - w pętli dopóki pierwszy bajt czy słowo grupy opisującej znak jest
>> różne od 0, a co gdy znak zero będzie błędnie w środku grupy?

To samo, co w przypadku gdy błędny bajt będzie w środku grupy, albo w 
grupie znajduje się więcej bajtów niż trzeba. Jakoś obsłużyć wg potrzeb.

>> - jaką wielkość bufora 16-bitowego przydzielać dla wejściowego utf8 i
>> odwrotnie?

Pesymistycznie? 2x więcej bajtów, niż dla UTF-8.

>> - w jaki dobry, statystyczny sposób określić czy tekst bez BOM jest UTF8?

Co rozumiesz przez „statyczny”?

> Przy okazji - jak printfem wypisać znaki Unicode na konsolę lub do
> pliku?

Przenośnie? Zaopatrz się w jakąś bibliotekę. Przenośnie trudno zrobić 
(nawet korzystając z dobrodziejstw >= C++11). wchar_t zazwyczaj trzyma 
znaki w UTF-16 lub UTF-32 w zależności od systemu, char to już w ogóle 
wolna amerykanka zależna od bieżących ustawień locale (także na Windows, 
bo niektórzy się dziwią).
Nieprzenośnie, znając bieżące ustawienia? Zakoduj na sztywno ;)


Formalnie poczytać i zrozumieć, nawet jak użyć chcesz czegoś gotowego:
http://www.cl.cam.ac.uk/~mgk25/unicode.html
http://utf8everywhere.org/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads