Programowanie w systemie UNIX/Kodowanie: Różnice pomiędzy wersjami
m ref |
m →Plik tekstowy: string |
||
Linia 221: | Linia 221: | ||
printf("\xef\xbb\xbf"); |
printf("\xef\xbb\xbf"); |
||
=String czyli łańcuchy znaków= |
|||
* [https://hackernoon.com/what-every-programmer-should-know-about-string-a6611537f84e What every programmer should know about ‘String’ by Ahmed shamim hassan] |
|||
=Plik tekstowy= |
=Plik tekstowy= |
||
Plik tekstowy<ref>[[w:Plik tekstowy|Plik tekstowy]]</ref> składa się z linii<ref>[[w:en:Line (text file)| linia w ang. wikipedii]]</ref> i kończy się znakiem końca pliku ( EOF )<ref>[[w:EOF|EOF w wikipedii ]]</ref>. |
Plik tekstowy<ref>[[w:Plik tekstowy|Plik tekstowy]]</ref> składa się z linii<ref>[[w:en:Line (text file)| linia w ang. wikipedii]]</ref> i kończy się znakiem końca pliku ( EOF )<ref>[[w:EOF|EOF w wikipedii ]]</ref>. |
Wersja z 21:24, 28 maj 2018
Wstęp
- Co każdy programista powinien wiedzieć o kodowaniu wg Davida C. Zentgrafa [1]
Kodowanie
Dekodery
- znaków (ang. char)
- plików
Testy
- strona testowa
- Browser Test Page for Unicode Character[8]
- detexify : find a symbol in symbols-a4.pdf that you just can't memorize.
Typowe problemy
- kopiowanie i wklejanie powoduje że, zamiast oczekiwanego znaku otrzymujemy inny (zamiast minusa ...) .
- oznaczenie końca pliku ( EOF )[9]
Znaki
Znaki z punktu widzenia programisty dzielimy na:
- drukowalne
- niedrukowalne
Podział wg znaczenia : [10]
- 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%)
Podział wg strony kodowej [11]
- ascii
- unicode
- UTF-8
Znaki drukowalne
Podobne znaki
- 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 )[12]
- 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 |
− − −
| |
Hyphen-minus | - | U+002D | - |
%2D |
|
Full-width Hyphen-minus | - | U+FF0D | %EF%BC%8D |
- -
|
Znaki niedrukowalne
- znaki specjalne [13]
Wyświetlanie znaków niedrukowalnych[14] (nazwa pliku przykładowa):
cat -t -e p.txt
lub :
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 -c p.txt
BOM
Unicode Byte-Order-Marker (BOM)[15]
Znajdowanie plików z BOM :[16]
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[17]
W c: [18]
// 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 38 2D
|
43 47 118 56
|
+/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ą:[19]
sed '1 s/\xEF\xBB\xBF//' < input > output
Dodać:
printf("\xef\xbb\xbf");
String czyli łańcuchy znaków
Plik tekstowy
Plik tekstowy[20] składa się z linii[21] i kończy się znakiem końca pliku ( EOF )[22].
Linia jest to ciąg znaków[23] (drukowalnych[24] i niedukowalnych[25]) zakończony znakiem końca linii[26]
Linię możemy podzielić na wyrazy rozdzielone spacjami[27]
typy plików tekstowych
- zwykły tekst (rozszerzenie txt)
- plik z kodem w C (ASCII text)
- csv
- ical
- łaty i różnice
csv
Przykładowy csv[28], 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
ical
Plik iCalendar[29][30] służy do zapisu danych kalendarzy. [31]
- 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:
Sygnatura pliku
Wczytywanie danych z pliku - parser
Kodowanie pliku
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 :[38]
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[39] lub Okteta.[40]
info o pliku
Więcej
- Przetwarzanie kodu źródłowego programu - makra preprocesora
- stackoverflow questions : detecting-programming-language-from-a-snippet
- Defines all Languages known to GitHub
- search code web page
- detect language
- detect programing language
- konwersje:
Źródła
- ↑ What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text by David C. Zentgraf
- ↑ Character Encoder / Decoder
- ↑ Online Character Map
- ↑ wikipedia kod znaku
- ↑ Mausr - Marek's Unicode Symbols Recognizer
- ↑ iconv − character set conversion
- ↑ iconv − character set conversion
- ↑ Browser Test Page for Unicode Character
- ↑ stackoverflow question representing-eof-in-c-code
- ↑ znaki unicode
- ↑ What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text by David C. Zentgraf
- ↑ UTF-8 General Punctuation. Range: Decimal 8192-8303. Hex 2000-206F.
- ↑ Handling special characters in C (UTF-8 encoding)- stackoverflow
- ↑ bash function to highlight non-printing characters: tab, newline, BOM, nbsp
- ↑ BOM w wikipedii
- ↑ Elegant way to search for UTF-8 files with BOM?
- ↑ dos2unix converters
- ↑ Unicode encodings
- ↑ A Shell Script to Find and Remove the BOM Marker by Enrico M. Crisostomo
- ↑ Plik tekstowy
- ↑ linia w ang. wikipedii
- ↑ EOF w wikipedii
- ↑ znakowy typ danych w wikipedii
- ↑ znaki drukowalne w wikipedii
- ↑ znaki niedrukowalne w wikipedii
- ↑ Koniec linii w wikipedii
- ↑ spacja
- ↑ CSV to iCal Calendar Convertor by Manas Tungare
- ↑ Internet Calendaring and Scheduling Core Object Specification (iCalendar)
- ↑ iCalendar Specification Excerpts
- ↑ Pliki w formacie iCalendar
- ↑ libical library
- ↑ gcalcli library
- ↑ sygnsatura poliku w ang. wikipedii
- ↑ How to Determine Text File Encoding Submitted by Ben Bryant
- ↑ jak korzystać w c z utf-8
- ↑ C i unicode
- ↑ od - The Geek stuff
- ↑ Jeex
- ↑ Okteta - edytor plików binarnych