Nie mam pewności co do kodowania tekstu i zestawu znaków. Z wielu powodów muszę się nauczyć rzeczy innych niż Unicode i UTF8 w mojej nadchodzącej pracy.
Znajduję słowo „charset” w nagłówkach e-maili, jak w „ISO-2022-JP”, ale nie ma takiego kodowania w edytorach tekstu. (Rozejrzałem się po różnych edytorach tekstu.)
Jaka jest różnica między kodowaniem tekstu a zestawem znaków? Byłbym wdzięczny, gdybyś mógł mi pokazać kilka przykładów użycia.
Odpowiedzi:
Gruntownie:
źródło
Z każdym kodowaniem jest powiązany określony zestaw znaków, ale może istnieć więcej niż jedno kodowanie dla danego zestawu znaków. Zestaw znaków to po prostu to, na co wygląda, zestaw znaków. Istnieje wiele zestawów znaków, w tym wiele przeznaczonych dla określonych skryptów lub języków.
Jednak jesteśmy na dobrej drodze do przejścia na Unicode, który zawiera zestaw znaków, który może reprezentować prawie wszystkie skrypty świata. Jednak istnieje wiele kodowań dla Unicode. Kodowanie to sposób odwzorowania ciągu znaków na ciąg bajtów. Przykłady kodowania Unicode obejmują UTF-8 , UTF-16 BE i UTF-16 LE . Każdy z nich ma zalety dla określonych aplikacji lub architektur maszyn.
źródło
Oprócz innych odpowiedzi myślę, że ten artykuł jest dobrą lekturą http://www.joelonsoftware.com/articles/Unicode.html
Artykuł zatytułowany jest „ Absolutne minimum każdy programista absolutnie, pozytywnie musi wiedzieć o Unicode i zestawach znaków (bez wymówek!) ”, Którego autorem jest Joel Spolsky . Esej ma ponad 10 lat, ale (niestety) jego treść jest nadal aktualna ...
źródło
Kodowanie znaków składa się z:
Krok # 1 sam w sobie jest „repertuarem znaków” lub abstrakcyjnym „zestawem znaków”, a # 1 + # 2 = „zakodowany zestaw znaków”.
Ale zanim Unicode stał się popularny i wszyscy (z wyjątkiem wschodnioazjatyckich) używali kodowania jednobajtowego, kroki # 3 i # 4 były trywialne (punkt kodowy = jednostka kodu = bajt). Dlatego starsze protokoły nie rozróżniały wyraźnie między „kodowaniem znaków” a „zakodowanym zestawem znaków”. Starsze protokoły są używane,
charset
gdy naprawdę oznaczają kodowanie.źródło
Rzucając więcej światła osobom odwiedzającym odtąd, miejmy nadzieję, że będzie to pomocne.
Zestaw znaków
W każdym języku istnieją znaki, a zbiór tych znaków tworzy „zestaw znaków” tego języka. Gdy znak jest kodowany, przypisywany jest mu niepowtarzalny identyfikator lub numer nazywany punktem kodowym. W komputerze te punkty kodowe będą reprezentowane przez jeden lub więcej bajtów.
Przykłady zestawu znaków: ASCII (obejmuje wszystkie angielskie znaki), ISO / IEC 646, Unicode (obejmuje znaki ze wszystkich żywych języków na świecie)
Zakodowany zestaw znaków
Zakodowany zestaw znaków to zestaw, w którym każdemu znakowi przypisany jest unikalny numer. Ten unikalny numer nazywany jest „punktem kodowym”.
Zakodowane zestawy znaków są czasami nazywane stronami kodowymi.
Kodowanie
Kodowanie to mechanizm mapowania punktów kodowych z pewnymi bajtami, tak aby znak mógł być odczytywany i zapisywany jednolicie w różnych systemach przy użyciu tego samego schematu kodowania.
Przykłady kodowania: ASCII, schematy kodowania Unicode, takie jak UTF-8, UTF-16, UTF-32.
Opracowanie powyższych 3 koncepcji
09 15
) przy użyciu kodowania UTF-16FC
podczas gdy w „UTF-8” jest reprezentowane jako,C3 BC
aw UTF-16 jakoFE FF 00 FC
.09 15
), trzy bajty w przypadku UTF-8 (E0 A4 95
) lub cztery bajty w przypadku UTF-32 (00 00 09 15
)źródło
Zestaw znaków lub repertuar znaków to po prostu zestaw (nieuporządkowana kolekcja) znaków. Zakodowany zestaw znaków przypisuje liczbę całkowitą („punkt kodowy”) do każdego znaku w repertuarze. Kodowanie to sposób jednoznacznego przedstawiania punktów kodowych jako strumienia bajtów.
źródło
Wygooglowałem to. http://en.wikipedia.org/wiki/Character_encoding
Różnica wydaje się być subtelna. Termin zestaw znaków w rzeczywistości nie dotyczy Unicode. Unicode przechodzi przez szereg abstrakcji. abstrakcyjne znaki -> punkty kodowe -> kodowanie punktów kodowych do bajtów.
Zestawy znaków faktycznie to pomijają i bezpośrednio przeskakują ze znaków na bajty. sekwencja bajtów <-> sekwencja znaków
Krótko mówiąc, kodowanie: punkty kodowe -> kodowanie bajtów: znaki -> bajty
źródło
Zestaw znaków to tylko zestaw; albo zawiera np. znak euro, albo go nie zawiera. To wszystko.
Kodowanie to bijektywne odwzorowanie z zestawu znaków na zbiór liczb całkowitych. Jeśli obsługuje znak Euro, musi przypisać określoną liczbę całkowitą do tego znaku i do żadnego innego.
źródło
Moim zdaniem zestaw znaków jest częścią kodowania (komponentem), kodowanie ma atrybut zestawu znaków, więc zestaw znaków może być używany w wielu kodowaniach. Na przykład unicode to zestaw znaków używany w kodowaniach takich jak UTF-8, UTF-16 i tak dalej. Zobacz ilustrację tutaj:
Znak w zestawie znaków nie oznacza typu znaku w świecie programowania, oznacza znak w świecie rzeczywistym, w języku angielskim może to być to samo, ale w innych językach nie, jak chiński, `` 我 '' jest nieodłącznym znakiem w zestawach znaków (UNICODE, GB [używany w GBK i GB2312]), „a” jest również znakiem w zestawach znaków (ASCII, ISO-8859 , UNICODE).
źródło
Moim zdaniem słowo „charset” powinno ograniczać się do określenia parametru używanego w standardach HTTP, MIME i podobnych w celu określenia kodowania znaków (odwzorowania z serii znaków tekstowych na sekwencję bajtów) według nazwy. Na przykład:
charset=utf-8
.Zdaję sobie jednak sprawę, że MySQL, Java i inne miejsca mogą używać słowa „zestaw znaków” na oznaczenie kodowania znaków.
źródło
Kodowanie to odwzorowanie między bajtami i znakami z zestawu znaków, dlatego pomocne będzie omówienie i zrozumienie różnicy między bajtami a znakami .
Pomyśl o bajtach jak o liczbach od 0 do 255, podczas gdy znaki to abstrakcyjne rzeczy, takie jak „a”, „1”, „$” i „Ę”. Zestaw wszystkich dostępnych znaków nazywany jest zestawem znaków .
Każdy znak ma sekwencję jednego lub więcej bajtów, które są używane do jego reprezentacji; jednak dokładna liczba i wartość bajtów zależy od zastosowanego kodowania i istnieje wiele różnych kodowań.
Większość kodowań opiera się na starym zestawie znaków i kodowaniu zwanym ASCII, które ma jeden bajt na znak (w rzeczywistości tylko 7 bitów) i zawiera 128 znaków, w tym wiele typowych znaków używanych w amerykańskim angielskim.
Na przykład tutaj jest 6 znaków w zestawie znaków ASCII, które są reprezentowane przez wartości od 60 do 65.
W pełnym zestawie ASCII najniższa używana wartość to zero, a najwyższa 127 (oba to ukryte znaki sterujące).
Jednak gdy zaczniesz potrzebować więcej znaków niż zapewnia podstawowy ASCII (na przykład litery z akcentami, symbole walut, symbole graficzne itp.), ASCII nie jest odpowiednie i potrzebujesz czegoś bardziej rozbudowanego. Potrzebujesz więcej znaków (inny zestaw znaków) i potrzebujesz innego kodowania, ponieważ 128 znaków nie wystarczy, aby zmieścić wszystkie znaki. Niektóre kodowania oferują jeden bajt (256 znaków) lub do sześciu bajtów.
Z biegiem czasu powstało wiele kodowań. W świecie Windows istnieje CP1252 lub ISO-8859-1, podczas gdy użytkownicy Linuksa wolą UTF-8. Java natywnie używa UTF-16.
Jedna sekwencja wartości bajtów dla znaku w jednym kodowaniu może oznaczać zupełnie inny znak w innym kodowaniu, a nawet może być nieprawidłowa.
Na przykład, w ISO 8859-1 , Â jest reprezentowany przez jeden bajt wartości
226
, podczas gdy w UTF-8 to dwa bajty:195, 162
. Jednak w ISO 8859-1 ,195, 162
byłyby dwie postacie, a, ¢ .Kiedy komputery przechowują dane o znakach wewnętrznie lub przesyłają je do innego systemu, przechowują lub wysyłają bajty. Wyobraź sobie, że system otwierający plik lub odbierający wiadomość widzi bajty
195, 162
. Skąd wie, jakie to są postacie?Aby system mógł zinterpretować te bajty jako rzeczywiste znaki (i wyświetlić je lub przekonwertować na inne kodowanie), musi znać zastosowane kodowanie. Dlatego kodowanie pojawia się w nagłówkach XML lub można je określić w edytorze tekstu. Informuje system o mapowaniu między bajtami i znakami.
źródło