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:
charset
Atrybut HTML jest używany do określenia kodowaniaCharset
w Javie są kodowaniemcharset
sicharacter sets
MySQL 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?
charset
wcześ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 ...