/ / Ako sú programy napísané v Unicode? - java, unicode, kódovanie znakov, javac

Ako sú programy napísané v systéme Unicode? - java, unicode, kódovanie znakov, javac

Z vydania Java Specification SE 7 Edition

§3.1 unicode

Programy sa zapisujú pomocou znakovej sady Unicode.

§3.2 Lexikálne preklady

Surový znakový prúd Unicode je preložený do postupnosti pomocou nasledujúcich troch lexikálnych prekladových krokov ...

Som zmätený, pretože píšem svoj zdrojový kódmoje natívne kódovanie znakov (Windows-1252) a špecifikácia uvádza, že (?) všetko začína zo surového znakového toku Unicode, potom sa vykonajú lexikálne preklady (vrátane konverzie unikajúceho Unicode).

Uvádzajú, že na úniky Unicode je možné použiťpoužiť ľubovoľný znak Unicode pomocou iba znaky ASCII; ak sa uskutoční predchádzajúca konverzia, myslím si, že odkazujú na znaky ASCII v podmnožine znakovej sady Unicode, čo má zmysel.

Existuje predchádzajúca konverzia z kódovania použitého na zápis zdrojového súboru do Unicode?

Niektoré informácie sa týkali, ale myslím si, že ide skôr o manipuláciu s textom za behu, než o proces kompilácie:

Konverzia textu bez Unicode

odpovede:

4 pre odpoveď č. 1

V podstate to, čo hovorí, je to, že môžeteV zdrojových súboroch používajte iba znaky Unicode. Nedefinuje, ako sú tieto znaky skutočne kódované do bajtov, to je len na vás a platforme, na ktorej pracujete.

V podstate to, čo sa deje vo vnútri kompilátora, ježe zdrojový súbor je načítaný z disku ako prúd bajtov, tieto bajty sa potom skonvertujú na internú reprezentáciu znakov Unicode v Java. Spôsob, akým prevádza surové bajty zdrojového súboru na znaky Unicode, je založený na -encoding možnosť postúpiť javac, Ak nie -encoding nastavená bude používať predvolené kódovanie vašej platformy.

Teraz je tiež dôležité si uvedomiť, že potom, čo kompilátor prevedie bajty zdrojového kódu na znaky, potom vykoná ďalší krok na prevod literálov znakov (napr. u00a5123) do príslušného jedného znaku Unicode. Toto je v skutočnosti prvý z troch krokov uvedených v oddiele 3.2, ktoré ste uviedli vo svojej otázke. Týmto spôsobom je možné použiť iba obyčajné znaky ASCII na reprezentáciu akéhokoľvek znaku Unicode vo vašom zdroji.


2 pre odpoveď č. 2

„Unicode“ nie je kódovanie, je to jednoducho zoznamznakov a pridružených čísiel (alebo „kódových bodov“), ale na rozdiel od starších súborov znakov čísla nepredstavujú znaky Unicode na disku. Na kódovanie alebo dekódovanie znakov Unicode potrebujete osobitné kódovanie, ktoré mapuje z bajtových sekvencií na čísla Unicode, a teda na znaky Unicode.

Niektoré kódovania, napríklad utf-8, sú navrhnuté tak, aby používalikódovať všetky možné kódové body Unicode. Iné, napríklad Windows CP 1252, môžu predstavovať iba malú podmnožinu znakov Unicode. Všetky platné údaje systému Windows CP 1252 však možno stále dekódovať do platnej sekvencie kódovacích bodov Unicode.

Áno, existuje konverzia z reprezentácie na disku do virtuálneho znakového toku Unicode.