Coś, co od dawna mnie myliło, to fakt, że tak wiele programów używa terminów „charset” i „kodowanie” jako synonimów.
Kiedy ludzie odnoszą się do „kodowania” unicode, zawsze mają na myśli zestaw reguł do reprezentowania znaków unicode jako ciąg bajtów - jak ASCII lub UTF-8. Wydaje się to rozsądne i intuicyjne; Chodzi o to, że „kodujesz” te znaki jako bajty przy użyciu określonego zestawu reguł.
Ponieważ te zestawy reguł czasami zapewniają jedynie „kodowanie” niektórych podzbiorów wszystkich znaków Unicode, można sobie wyobrazić, że „zestaw znaków” - skrót od „zestawu znaków” - oznacza po prostu zestaw znaków Unicode - bez względu na to, jak te znaki są zakodowane. Kodowanie oznaczałoby zatem zestaw znaków (kodowanie takie jak ASCII, które ma tylko reguły kodowania 128 znaków, byłoby powiązane z zestawem znaków tych 128 znaków), ale zestaw znaków nie musi oznaczać kodowania (na przykład UTF-8, UTF -16 i UTF-32 są różnymi kodowaniami, ale mogą kodować ten sam zestaw znaków).
A jednak - i oto sedno mojego pytania - użycie słowa „charset” w świecie rzeczywistym nie odpowiada temu, co sugeruje konstrukcja tego słowa. Prawie zawsze jest używane w znaczeniu „kodowania”.
Na przykład:
charsetAtrybut HTML jest używany do określenia kodowaniaCharsetw Javie są kodowaniemcharsetsicharacter setsMySQL są po raz kolejny kodowaniem
Ile lat ma to dziwne (ab) użycie języka i jak powstała ta sprzeczna z intuicją definicja „zestawu znaków”? Czy to może pochodzić z czasów, kiedy naprawdę był w praktyce odwzorowanie jeden do jednego między kodowań w użyciu i zestawy znaków są obsługiwane? A może istniał jakiś szczególnie wpływowy standard lub specyfikacja, które podyktowały tę definicję tego słowa?
charsetwcześniejszych niż standard Unicode, więc chociaż nie mogło to być „odwzorowanie jeden na jeden”, znaki wymagane w dokumencie zwykle wymuszały wybór kodowania. Ale nie mam czasu na badanie faktycznej historii tego słowa ...