Programowanie w systemie UNIX/Kodowanie

 "Kompletne dzieła Szekspira, nieskompresowane, zajmują mniej więcej tyle samo miejsca, co 2 typowe zdjęcia zrobione nowoczesnym smartfonem (~5 megabajtów)."[1]


Plik tekstowy (ang. text file) –

  • zawartość : tekst: dane w postaci alfanumerycznej. Uwaga są plik zawierające tekst w formie binarnej ( pdf, doc)
  • format pliku:
    • ciąg linii tekstu elektronicznego
    • nie jest plikiem binarnym
    • pozwala na otwarcie w edytorze tekstu

Podział klasyczny

  • prosty tekst (ang. plain text) - niesformatowany
  • bogaty tekst ( ang. rich text) - sformatowany


Podział plików tekstowych wg MIME

  • text/1d-interleaved-parityfec
  • text/cache-manifest appcache manifest
  • text/calendar ics ifb
  • text/cql CQL
  • text/cql-extension
  • text/cql-identifier
  • text/css css
  • text/csv csv
  • text/csv-schema csvs
  • text/dns soa zone
  • text/encaprtp
  • text/enriched
  • text/example
  • text/fhirpath
  • text/flexfec
  • text/fwdred
  • text/gff3 gff3
  • text/grammar-ref-list
  • text/html html htm shtml
  • text/javascript es js mjs
  • text/jcr-cnd cnd
  • text/markdown md markdown
  • text/mizar miz
  • text/n3 n3
  • text/parameters
  • text/parityfec
  • text/plain[2] txt text pot brf srt
  • text/provenance-notation provn
  • text/prs.fallenstein.rst rst
  • text/prs.lines.tag tag dsc
  • text/prs.prop.logic
  • text/raptorfec
  • text/RED
  • text/rfc822-headers
  • text/rtf
  • text/rtp-enc-aescm128
  • text/rtploopback
  • text/rtx
  • text/SGML sgml sgm
  • text/shaclc shaclc shc
  • text/shex shex
  • text/spdx spdx
  • text/strings
  • text/t140
  • text/tab-separated-values tsv
  • text/texmacs tm
  • text/troff t tr roff
  • text/turtle ttl
  • text/ulpfec
  • text/uri-list uris uri
  • text/vcard vcf vcard
  • text/vnd.a a
  • text/vnd.abc abc
  • text/vnd.ascii-art ascii
  • text/vnd.curl curl
  • text/vnd.debian.copyright copyright
  • text/vnd.DMClientScript dms
  • text/vnd.dvb.subtitle
  • text/vnd.esmertec.theme-descriptor jtd
  • text/vnd.familysearch.gedcom ged
  • text/vnd.ficlab.flt flt
  • text/vnd.fly fly
  • text/vnd.fmi.flexstor flx
  • text/vnd.gml
  • text/vnd.graphviz gv dot
  • text/vnd.hans hans
  • text/vnd.hgl hgl
  • text/vnd.in3d.3dml 3dml 3dm
  • text/vnd.in3d.spot spot spo
  • text/vnd.IPTC.NewsML
  • text/vnd.IPTC.NITF
  • text/vnd.latex-z
  • text/vnd.motorola.reflex
  • text/vnd.ms-mediapackage mpf
  • text/vnd.net2phone.commcenter.command ccc
  • text/vnd.radisys.msml-basic-layout
  • text/vnd.senx.warpscript mc2
  • text/vnd.sosi sos
  • text/vnd.sun.j2me.app-descriptor jad
  • text/vnd.trolltech.linguist ts
  • text/vnd.wap.si si
  • text/vnd.wap.sl sl
  • text/vnd.wap.wml wml
  • text/vnd.wap.wmlscript wmls
  • text/vtt vtt
  • text/x-bibtex bib
  • text/x-boo boo
  • text/x-c++hdr h++ hpp hxx hh
  • text/x-c++src c++ cpp cxx cc
  • text/x-chdr h
  • text/x-component htc
  • text/x-csh csh
  • text/x-csrc c
  • text/x-diff diff patch
  • text/x-dsrc d
  • text/x-haskell hs
  • text/x-java java
  • text/x-lilypond ly
  • text/x-literate-haskell lhs
  • text/x-moc moc
  • text/x-pascal p pas
  • text/x-pcs-gcd gcd
  • text/x-perl pl pm
  • text/x-python py
  • text/x-scala scala
  • text/x-setext etx
  • text/x-sfv sfv
  • text/x-sh sh
  • text/x-tcl tcl tk
  • text/x-tex tex ltx sty cls
  • text/x-vcalendar vcs
  • text/xml
  • text/xml-dtd
  • text/xml-external-parsed-entity



Przykłady prostych plików tekstowych:


Przykładowy csv[3], który może być zaimportowany do kalendarza:

Subject,Start Date,Start Time,End Date,End Time,All Day,Description
My important event,04/19/2012,6:00pm,04/19/2012,9:00pm,false,Longer Description
An all-day event,04/19/2012,,04/19/2012,,true,Missing times are OK
A multi-day event,04/19/2012,6:00pm,04/20/2012,6:00pm,false,Start date and end date are different

pliki konfiguracyjne

edytuj

Biblioteka

  • TOML ( Tom's Obvious Minimal Language) -A config file format for humans[4]

Grafika ASCI

edytuj

Grafika ASCI ( ASCI-Art)


Directory content

docs/
├── img/            # Image dir
├── include/        # TeX and HTML options
├── parts/          # Markdown content
├── _bookdown.yml   # bookdown options
├── _output.yml     # rmd output options
├── book.pdf        # PDF output
├── index.html      # HTML output
├── main.rmd        # main MD file
├── Makefile
└── README.md

Grafika Unicode

edytuj

Grafika Unicode [5]


  ┌─head─┐     ┌──value──┐       ┌──value──┐
  │   ├───────►│    4    │       │    0    │
  └──────┘     ├───next──┤       ├───next──┤
               │    ├───────────►│   NULL  │
               └─────────┘       └─────────┘

Plik iCalendar[6][7] służy do zapisu danych kalendarzy. [8]

  • Pierwszy wiersz w pliku iCalendar zawiera nagłówek = BEGIN: VCALENDAR
  • ostatni wiersz pliku ( stopka) = END:VCALENDAR.
  • Pomiędzy powyższymi wierszami wprowadzane są wydarzenia.
    • wydarzenie musi być ujęte w wiersze BEGIN:VEVENT i END:VEVENT.


BEGIN: VCALENDAR 
BEGIN:VEVENT 
(szczegóły pojedynczego wydarzenia) 
END:VEVENT 
BEGIN:VEVENT 
(szczegóły pojedynczego wydarzenia) 
END:VEVENT 
END:VCALENDAR

biblioteki:

Budowa

edytuj

Prosty plik tekstowy:[11]

  • składa się ze znaków
  • znaki mogą być pogrupowanych w wyrazy i linie.[12] Wtedy plik może zawierać znaki końca linii (EOL)
  • plik może się rozpoczynać znakiem kolejności bajtów (BOM)
  • plik jest zakończony znakiem końca pliku (EOF)[13].


Linia jest to ciąg znaków[14] (drukowalnych[15] i niedukowalnych[16]) zakończony znakiem końca linii[17]

Linię możemy podzielić na wyrazy rozdzielone spacjami[18]

Sygnatura pliku

edytuj

Kodowanie

edytuj

Co każdy programista powinien wiedzieć o

  • kodowaniu wg Davida C. Zentgrafa [21]
  • zestawach znaków wg Joel Spolsky[22]

Kod alfanumeryczny

edytuj

Kod alfanumeryczny (ang. alphanumeric code) – kod, w którym do zapisu tekstów i liczb, przedstawianych jako ciągi cyfr, używa się określonych w danym kodzie znaków

Standardy kodowania

edytuj

Standardy ( strony kodowe, ang. code page)

  • ASCII
    • W stronach kodowych zgodnych z ASCII dolne 128 znaków zachowało swoje standardowe wartości US-ASCII
  • UTF-8
  • ISO 8859
  • Unicode ISO 10646[23]
  • EBCDIC
  • Windows-1250.

Niektóre ze standardów kodowania dopuszczają także kody sterujące, znaki diakrytyczne i znaki specjalne np. Unicode.

Pojęcia

  • standard kodowania: komputerowy standard kodowania zestawu znaków
  • strona kodowa ( ang. "code page")- tabela zawierająca znaki i odpowiadające im kody
  • Zestaw znaków ( charset)
  • progam kodujący (ang. Character Map ) - graficzny program pokazujący znak dla odpowiedniego kodu i odwroitnie w różnych standardach kodowania

Dekodery

edytuj

Dekoder znaków (ang. char) czyli jak sprawdzić znak?


Dekoder plików / tekstu

Jak sprawdzić kodowanie pliku w konsoli ?

edytuj

Sprawdzanie za pomocą komendy file ( nazwa pliku i wynik przykładowe) :

file a.txt
a.txt: UTF-8 Unicode (with BOM) text, with very long lines

UTF-8


Za pomocą komendy od :[33]

od -c babymonsterBUM.txt

przykładowy wynik :

0000000 357 273 277   s   i   z   e       2   0   0   0       1   0   0
0000020   0  \n   v   i   e   w       1   5   4       0   .   4   0   2
0000040   6   2   2   3   2   4   2   1   4   1   8   5   2   1   4   8
0000060   0   3   7   8   2   4   7   2   4   5   8   4   0   2   5   8
0000100   3   5   7   5   5   1   3   5   0   1   1   3   4   2   8   8
0000120   1   0   2   7   0   4   2   5   2   5   6   2   7   0   3   9
0000140   5   6   9   5   0   2   8   8   1   6   7   0   9   4   6   7
0000160   4   5   5   5   7   4   1   2   9   3   0   3   2   7   1   1
0000200   5   3   9   3   2   5   8   7   9   4   9   1   3   5   4   8
...
0010260   r   a   t   e   -   m   y   -   f   r   a   c   t   a   l   )
0010300   /   b   a   b   y   -   m   o   n   s   t   e   r   /  \n
0010317

Lub za pomocą edytora binarnego , np. beav, Jeex[34] lub Okteta.[35]

Typowe problemy

edytuj
 
Najczęściej używane standardy kodowanie występujące w sieci

Znaki z punktu widzenia programisty dzielimy na:

  • drukowalne
  • niedrukowalne

Podział wg znaczenia : [38]

  • litery (ang. letter) (91.8%), podkategorie: duże (uppercase = Lu) , małe (ang. lowercase = Ll), tytułowe (titlecase = Lt), zmodyfikowane ( modifier = Lm)
  • symbole (ang. symbol) : (5.0%), podkategoria: matematyczne (Symbol, math = Sm), zmodyfikowane (modifier = Sk), walutowe (currency = Sc)
  • znaki (Mark) : (1.4%)
  • cyfry (Number): 1,100 (1.0%)
  • Punctuation: 598 (0.5%)
  • inne (Other): 205 (0.2%)
  • Separator: 20 (0.0%)


Klasy znaków ( character classes) wyrażeń regularnych Bash ( Bash Regular Expressions = BRE)[39]

  • [[:alpha:]] - matches any alphabetic character written in upper or lower case.
  • [[:alnum:]]- matches any alphanumeric character - namely, the characters in the range 0-9, A-Z, a-z.
  • [[:blank:]] - matches a space and a tab character.
  • [[:digit:]]- any numeric character from 0to 9.
  • [[:upper:]]- uppercase alphabetic characters - A-Z.
  • [[:lower:]]- alphabetic characters in lower case - a-z.
  • [[:print:]] - matches any printable character.
  • [[:punct:]] - matches punctuation marks.
  • [[:space:]]- whitespace, in particular - a space, a tab character, characters NL, FF, VT, CR.



Podział wg strony kodowej [40]

  • ascii
  • unicode
    • UTF-8




Znaki drukowalne

edytuj

Program[41] drukuje znaki drukowalne ASCII:

// https://en.cppreference.com/w/c/language/ascii
// printtable ASCII
#include <stdio.h>
 
int main(void)
{
    puts("Printable ASCII:");
    for (int i = 32; i < 127; ++i) {
        putchar(i);
        putchar(i % 16 == 15 ? '\n' : ' ');
    }
}


Wynik:

Printable ASCII:
  ! " # $ % & ' ( ) * + , - . /
0 1 2 3 4 5 6 7 8 9 : ; < = > ?
@ A B C D E F G H I J K L M N O
P Q R S T U V W X Y Z [ \ ] ^ _
` a b c d e f g h i j k l m n o
p q r s t u v w x y z { | } ~


Podobne znaki

edytuj
  • ascii '-' ( Hyphen, dash, minus )
  • UTF-8 characters:
    • kod = U+2212 ( MINUS SIGN )
    • kod = U+002D ( HYPHEN-MINUS )
    • kod = U+005F ( LOW LINE )
    • kod = U+00AF ( MACRON )
    • kod = U+2010 ( HYPHEN )
    • kod = u+2011 ( NON-BREAKING HYPHEN )[42]
    • kod = U+2012 ( FIGURE DASH )
    • kod = U+2013 ( EN DASH )
    • kod = U+2014 ( EM DASH )
    • kod = U+268A ( MONOGRAM FOR YANG )


Read Character Unicode ASCII in URL HTML notations
Minus U+2212 %E2%88%92 &minus; &#x2212; &#8722;
Hyphen-minus - U+002D &#45; %2D
Full-width Hyphen-minus U+FF0D %EF%BC%8D &#xff0d; &#65293;


Standard ASCII przewidywał wspólny znak dla:

  • łącznika
  • minusa
  • myślnika

Wspólny znak kreski poziomej w zestawie znaków ASCII znajduje się na pozycji 45 i określany jest jako łącznik-minus (ang. hyphen-minus). Z punktu widzenia typografii jest to rozwiązanie daleko niewystarczające, ale podyktowane było względami technicznymi ówczesnego poziomu rozwoju technik informacyjnych. Kolejne wprowadzane w komputerach osobistych zestawy znaków były zgodne ze standardem ASCII, jednak zwiększały liczbę dostępnych znaków. Stosowany w polskiej wersji systemu Windows zestaw Windows-1250 zawiera obok znaku łącznika-minusa (Alt+045) również znaki półpauzy (Alt+0150) i pauzy (Alt+0151). Wprowadzony później standard Unikod (ang. Unicode) obejmujący wszystkie możliwe znaki wszystkich znanych języków, również zgodny ze standardem ASCII, zawiera znaki łącznika-minusa (U+002D), półpauzy (U+2013) i pauzy (U+2014), ale obok nich również znaki łącznika (U+2010) i minusa (U+2212). Typograficznie właściwym dla dywizu jest w Unikodzie znak (U+2010). W systemie Microsoft Windows większość znaków pisarskich, także tych nieumieszczonych na klawiaturze, dostępna jest poprzez Tablicę znaków (w menu Start/Programy/Akcesoria/Tablica znaków lub Start/Uruchom... wpisując 'charmap'). Znaki te można także wprowadzać z klawiatury posługując się skrótami z kodami znaków. Przykładowo znak łącznika/minusa może być wprowadzony kombinacją klawiszy Alt+045 (lewy Alt w przypadku ustawionej tzw. polskiej klawiatury programisty, kod znaku wprowadzany z numerycznej części klawiatury), znaki pauzy i półpauzy – odpowiednio skrótami: Alt+0151 i Alt+0150.

W systemie Mac OS z układem klawiatury angielskiej oraz polskiej programisty znak półpauzy wprowadza się skrótem Alt+-, a pauzy Alt+Shift+-, natomiast w układzie polskiej maszynistki znak półpauzy wprowadza się skrótem Alt+Shift+8, a pauzy Alt+/.
W systemach operacyjnych działających w środowiskach graficznych KDE i Gnome, takich jak np. Linux, wymienione znaki można wprowadzić z tablicy znaków bądź trzymając wciśnięty lewy ctrl i shift wpisać u2014 (pauza) lub u2013 (półpauza), bądź użyć klawisza compose (--- daje pauzę, a --. półpauzę).</ref>

Nazwa Znak Unicode Kod HTML Nazwa unikodowa
Dywiz (łącznik) &#x2010; lub &#8208; HYPHEN
Łącznik-minus &#x2D; lub &#45; HYPHEN-MINUS
Minus &minus; lub &#x2212; lub &#8722; MINUS SIGN
Półpauza (myślnik) &ndash; lub &#x2013; lub &#8211; EN DASH
Pauza (myślnik) &mdash; lub &#x2014; lub &#8212; EM DASH
Kreska liczbowa &#x2012; lub &#8210; FIGURE DASH

Poziome zestawienie powyższych znaków w tej samej kolejności:

-

Podobnie jak większość zaawansowanych edytorów tekstów, standard Unicode przewiduje specjalne znaki dla specyficznych sytuacji, związanych z automatyzacją przetwarzania tekstu:

  • miękki (opcjonalny) łącznik (U+00AD), który pozostaje ukryty, gdy znajduje się w środku wiersza, jest natomiast widoczny, gdy przypada na koniec wiersza;
  • łącznik, po którym wyraz nie może być dzielony (U+2011), którego należy użyć na przykład w słowie K‑219.

Dywiz charakterystyczny m.in. dla polskiej ortografii, tj. łącznik stawiany na końcu wiersza i powtarzany na początku następnego, jak w poniższym przykładzie:

Akademia Górniczo-
-Hutnicza

można uzyskać przez kombinację miękkiego łącznika i łącznika niełamiącego.

Znaki niedrukowalne

edytuj
  • znaki specjalne [43]


Przykłady:

  • newline character (LF = Line Feed \n, \x0a)[44]


Wyświetlanie znaków niedrukowalnych

edytuj

(nazwa pliku przykładowa):


hl-nonprinting () { local C=$(printf '\033[0;36m') B=$(printf '\033[0;46m') R=$(printf '\033[0m') np=$(env printf "\u00A0\uFEFF"); sed -e "s/\t/${C}▹&$R/g" -e "s/$/${C}⁋$R/" -e "s/[$np]/${B}& $R/g";}

lub od = Octal Dump:

od -c p.txt # c same as -t c, select printable characters or backslash escapes
 od -tx1  file # output as a hexadecimal 1-byte units 

lub hexdump:

 hexdump -C file  # tell you byte-for-byte what the file actually contains


lub z użyciem sed[48]

 sed -n 'l' myfile.txt


lub vim


 vi -b myfile.txt

lub otworzyć w LibreOffice Writer i zaznaczyć opcję pokaż Menu/Widok/Znaczniki formatowania[49]

   cat -t -e p.txt


Formatowanie pliku makefile sprawdzimy za pomocą: [50]

  cat -e -t -v makefile

W wyniku:

  • tabulatory jako ^I
  • końcówki linii jako $

Unicode Byte-Order-Marker (BOM)[51]


Znajdowanie plików z BOM :[52]

grep -rl $'\xEF\xBB\xBF'

lub :

file * | grep UTF

albo znaleźć i usunąć BOM:

find . -type f -exec sed '1s/^\xEF\xBB\xBF//' -i.bak {} \; -exec rm {}.bak \;

lub dos2unix[53]


W c: [54]


// http://unicodebook.readthedocs.org/en/latest/guess_encoding.html
#include <string.h>   /* memcmp() */

const char *UTF_16_BE_BOM = "\xFE\xFF";
const char *UTF_16_LE_BOM = "\xFF\xFE";
const char *UTF_8_BOM = "\xEF\xBB\xBF";
const char *UTF_32_BE_BOM = "\x00\x00\xFE\xFF";
const char *UTF_32_LE_BOM = "\xFF\xFE\x00\x00";

char* check_bom(const char *data, size_t size)
{
    if (size >= 3) {
        if (memcmp(data, UTF_8_BOM, 3) == 0)
            return "UTF-8";
    }
    if (size >= 4) {
        if (memcmp(data, UTF_32_LE_BOM, 4) == 0)
            return "UTF-32-LE";
        if (memcmp(data, UTF_32_BE_BOM, 4) == 0)
            return "UTF-32-BE";
    }
    if (size >= 2) {
        if (memcmp(data, UTF_16_LE_BOM, 2) == 0)
            return "UTF-16-LE";
        if (memcmp(data, UTF_16_BE_BOM, 2) == 0)
            return "UTF-16-BE";
    }
    return NULL;
}


Kodowanie Reprezentacja (hexadecimal) Reprezentacja (decimal) Bajty jako znaki CP1252
UTF-8 EF BB BF 239 187 191 
UTF-16 (BE) FE FF 254 255 þÿ
UTF-16 (LE) FF FE 255 254 ÿþ
UTF-32 (BE) 00 00 FE FF 0 0 254 255 ␀␀þÿ (␀ refers to the ASCII null character)
UTF-32 (LE) FF FE 00 00 255 254 0 0 ÿþ␀␀ (␀ refers to the ASCII null character)
UTF-7 2B 2F 76 38
2B 2F 76 39
2B 2F 76 2B
2B 2F 76 2F

2B 2F 76 38 2D
43 47 118 56
43 47 118 57
43 47 118 43
43 47 118 47
43 47 118 56 45
+/v8
+/v9
+/v+
+/v/
+/v8-
UTF-1 F7 64 4C 247 100 76 ÷dL
UTF-EBCDIC DD 73 66 73 221 115 102 115 Ýsfs
SCSU 0E FE FF 14 254 255 ␎þÿ (␎ represents the ASCII "shift out" character)
BOCU-1 FB EE 28 251 238 40 ûî(
GB-18030 84 31 95 33 132 49 149 51 „1•3



Można go usunąć za pomocą:[55]

sed '1 s/\xEF\xBB\xBF//' < input > output

Dodać:

printf("\xef\xbb\xbf");

Koniec linii (ang. End Of Line, EOL) – znak lub sekwencja znaków oznaczająca zakończenie linii tekstu.


Współczesne edytory tekstu zwykle obsługują wszystkie sposoby oznaczania końca linii. Wiele innych programów również przetwarza tekst niezależnie od tego, jaki rodzaj zakończenia linii w nim występuje, jednak nie można zakładać, że automatyczne rozpoznawanie formatu zawsze zadziała poprawnie.

Błędna identyfikacja oznaczenia końca linii może doprowadzić do traktowania plików binarnych jako tekstowych i na odwrót, co może powodować błędną interpretację zawartości przy odczycie lub uszkodzenie danych przy zapisie. W związku z tym istnieje możliwość wymuszenia otwarcia lub przesłania pliku w trybie tekstowym albo binarnym. W trybie tekstowym znaki końca linii mogą być automatycznie zamieniane na znaki stosowane natywnie w systemie docelowym, natomiast w trybie binarnym wszystkie znaki pozostają nienaruszone.


W różnych systemach operacyjnych stosuje się określone znaki końca linii:


znakiem końca pliku (EOF)[56].

elementy przetwarzania tekstu

edytuj
  • usuwanie akcentów ( ang.Remove all accents)[57]
  • Convert to uppercase
  • Convert to lowercase
  • Base64 encode & decode
  • ROT13 cipher tool
  • String length calculator


info o pliku

edytuj


String czyli łańcuchy znaków

edytuj


Dzielenie łańcuchów na słowa

edytuj

Wczytywanie danych z pliku - parser

edytuj

Zobacz również

edytuj

Przypisy

edytuj
  1. quora: What-s-something-a-computer-programmer-knows-that-would-amaze-people-who-use-computers
  2. Plain Text - Dylan Beattie - NDC Copenhagen 2022
  3. CSV to iCal Calendar Convertor by Manas Tungare
  4. https://toml.io/en/
  5. stackoverflow question: i-dont-understand-how-this-code-replaces-the-head-of-a-linked-list-or-how-to ?
  6. Internet Calendaring and Scheduling Core Object Specification (iCalendar)
  7. iCalendar Specification Excerpts
  8. Pliki w formacie iCalendar
  9. libical library
  10. gcalcli library
  11. Plik tekstowy
  12. linia w ang. wikipedii
  13. EOF w wikipedii
  14. znakowy typ danych w wikipedii
  15. znaki drukowalne w wikipedii
  16. znaki niedrukowalne w wikipedii
  17. Koniec linii w wikipedii
  18. spacja
  19. sygnsatura poliku w ang. wikipedii
  20. How to Determine Text File Encoding Submitted by Ben Bryant
  21. What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text by David C. Zentgraf
  22. the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses by Joel Spolsky
  23. unicode - strona domowa
  24. Character Encoder / Decoder
  25. Online Character Map
  26. wikipedia kod znaku
  27. Mausr - Marek's Unicode Symbols Recognizer
  28. iconv − character set conversion
  29. iconv − character set conversion
  30. Browser Test Page for Unicode Character
  31. jak korzystać w c z utf-8
  32. C i unicode
  33. od - The Geek stuff
  34. Jeex
  35. Okteta - edytor plików binarnych
  36. stackoverflow question representing-eof-in-c-code
  37. fullhost blog: what-does-20-mean-in-a-web-address/
  38. znaki unicode
  39. bash-scripts-regular-expressions by Mikhail Raevskiy Sep 20, 2020
  40. What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text by David C. Zentgraf
  41. cppreference : ascii
  42. UTF-8 General Punctuation. Range: Decimal 8192-8303. Hex 2000-206F.
  43. Handling special characters in C (UTF-8 encoding)- stackoverflow
  44. Newline in wikipedia
  45. soscisurvey : view-chars
  46. bash function to highlight non-printing characters: tab, newline, BOM, nbsp
  47. datacadamia : bash whitespace
  48. alvin alexander : display-nonprintable-characters-in-text-file
  49. https://www.obliczeniowo.com.pl/794
  50. stackoverflow question: makefile4-missing-separator-stop
  51. BOM w wikipedii
  52. Elegant way to search for UTF-8 files with BOM?
  53. dos2unix converters
  54. Unicode encodings
  55. A Shell Script to Find and Remove the BOM Marker by Enrico M. Crisostomo
  56. EOF w wikipedii
  57. charset.org : base64-encode