• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program wykrywający błędy kodowania UTF-8 z pliku

VPS Starter Arubacloud
0 głosów
486 wizyt
pytanie zadane 11 stycznia 2018 w C i C++ przez migrad Nowicjusz (170 p.)

Cześć!

Dostałem na studiach projekt w którym muszę stworzyć program sprawdzający poprawność kodowania UTF-8 z pliku i nie mam zielonego pojęcia jak się za to zabrać. 

Byłbym niezmiernie wdzięczny gdyby ktoś pomógł mi w tym. Szczerze potrzebuję 50% z oceny tego projektu więc myślę ,że byłbym w stanie to zrobić z waszą pomocą. W linkach udostępniam zdjęcia z treścią projektu. Proszę o wszelkie wskazówki.

migrad.

Zdjęcia: 1 2

2 odpowiedzi

+1 głos
odpowiedź 11 stycznia 2018 przez criss Mędrzec (172,590 p.)

Jeśli dobrze zrozumiałem, to masz po prostu odkodować wszystkie liczby (znaki?) zakodowane w utf-8 i sprawdzić czy są zakodowane na odpowiedniej ilości bajtów - tzn. czy przypadkiem nie wykorzystano większej ilości bajtów niż jest to konieczne.

Jeśli macie z tego projekt, to pewnie już to wiesz, ale napisze:
 

utf-8
dolna wartość (hex) górna wartość (hex) ilość bitów na kodowaną liczbę utf-8
0 0x7f 7 0xxxxxxx
0x80 0x7ff 11 110xxxxx 10xxxxxx
0x800 0xffff 16 1110xxxx 10xxxxxx 10xxxxxx
0x10000 ox1fffff 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Zauważ, że jeśli liczba zakodowana jest na jednym bajcie, to pierwszy (i tutaj ostatni :D) bajt zaczyna się od zera. Jeśli na dwóch bajtach, to od dwóch jedynek i zera, jeśli na trzech to od trzech jedynek i zera, a jeśli na czterech to od czterech jedynek i zera. Wszystkie kolejne bajty zawsze zaczynają się od jedynki i zera, co w żadnym wypadku nie jest 'prefixem' pierwszego bajtu. (przez "zaczyna się" mam na myśli normalny odczyt po ludzku od lewej do prawej, od najstarszych do najmłodszych bitów)

Wiedząc powyższe łatwo* możesz sprawdzić ile bajtów musisz odczytać, żeby odkodować aktualny znak. Najwięcej czasu pewnie zejdzie już na samo odczytywanie zakodowanej wartości, ale też nie powinien to być duży problem.

* - załóżmy, że mam unsigned char (jeden z bajtów pliku), wiem już, że jest pierwszym bajtem jakiejś zakodowanej wartości i chce sprawdzić czy być może rozpoczyna on 4-bajtową reprezentacje - tzn. czy zaczyna się od 11110:

// unsigned char c;
if ((c & 0b11111000) == 0b11110000) {
   /* tutaj już  wiemy, że `c` zaczyna 4-bajtową sekwencje */
}
// dla czytelności użyłem tutaj notacji binarnej z c++14
// jeśli nie jest dla ciebie dostępna, to możemy to zapisać szesnastkowo
// 0b11111000 == 0xf8, 0b11110000 == 0xf0

Czyli po prostu zostawiam 5 najstarszych bitów (reszte ustawiam na 0) i sprawdzam czy jedynki są tam gdzie być powinny.

0 głosów
odpowiedź 11 stycznia 2018 przez j23 Mędrzec (194,920 p.)

Tutaj podałem przykład funkcji liczącej długość kodów poszczególnych znaków utf-8. Przeanalizuj sobie to...

Podobne pytania

0 głosów
1 odpowiedź 1,153 wizyt
0 głosów
1 odpowiedź 1,448 wizyt
pytanie zadane 19 lutego 2017 w Java przez plkpiotr Stary wyjadacz (12,420 p.)
0 głosów
1 odpowiedź 352 wizyt
pytanie zadane 18 lipca 2017 w PHP przez delarudii Nowicjusz (140 p.)

92,453 zapytań

141,262 odpowiedzi

319,087 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...