Je utf8 univerzální?

A. F.

Re:Je utf8 univerzální?
« Odpověď #15 kdy: 04. 07. 2018, 23:30:40 »
Akorát bych podotkl, že podpora vícejazyčnosti je širší téma než jen uložení/načtení textu. Ligatury, směr toku textu, spellchecker, řazení a porovnávání textu, různé formáty čísel, měn a datumu, odlišná časová pásma, fulltextové vyhledávání, tisk, různé jednotky (váhy, míry), různá legislativa, atd.
Jsem si toho vědom. Mě ale zajímá pouzet text. Tudíž z toho co jste vyjmenoval pouze ligatury. Na wiki píšou, že ligatury se dávají do "Doplňková oblast pro soukromé použití". Víte jak to funguje?

Arabské slitky ( l + `aliv: لا, k + `aliv, k + l, k + l + `aliv, l + m) jsou umístěné kde, netušíte? Dévanágarí jich má mít také mnoho. Vzhledem k tomu, že slitky nejsou povinné, v arabštině l + `aliv povinné je, ostatní již ne; fi, ti v češtině záleží na druhu slova - tak si nedovedu představit, že by se to dělalo automaticky.


ByCzech

  • *****
  • 1 848
    • Zobrazit profil
    • E-mail
Re:Je utf8 univerzální?
« Odpověď #16 kdy: 04. 07. 2018, 23:34:40 »
Původní specifikace UTF-8 měla na znak 1-6 bajtů. Jak to je u knihoven jestli počítají s tímto nebo už jen s novější specifikací, omezenou na 4 bajty nevím - jen pro upřesnění.

foo

Re:Je utf8 univerzální?
« Odpověď #17 kdy: 04. 07. 2018, 23:48:38 »
pro zacatek narazis u japonskych/cinskych pisem
Můžeš být konkrétnější?
Pro japonská a čínská písma nelze použít vůbec, nebo "jen" většinou ano, ale v některých okrajových případech ne?
Co se používá místo toho?
lze je pouzit, ale _nelze_ korektne pokryt vsechny znaky: cinske znaky se totiz zavedly v koreji a japonsku, v cine probehla reforma zjednoduseni pisma... atd atd, nakonec existuji ruzne sady znaku a ruzne lokalni variace, ktere unicode/utf nepokryva nebo pokryva chybne. pouziva se misto toho ucs

Re:Je utf8 univerzální?
« Odpověď #18 kdy: 04. 07. 2018, 23:55:21 »
Akorát bych podotkl, že podpora vícejazyčnosti je širší téma než jen uložení/načtení textu. Ligatury, směr toku textu, spellchecker, řazení a porovnávání textu, různé formáty čísel, měn a datumu, odlišná časová pásma, fulltextové vyhledávání, tisk, různé jednotky (váhy, míry), různá legislativa, atd.
Jsem si toho vědom. Mě ale zajímá pouzet text. Tudíž z toho co jste vyjmenoval pouze ligatury. Na wiki píšou, že ligatury se dávají do "Doplňková oblast pro soukromé použití". Víte jak to funguje?

Arabské slitky ( l + `aliv: لا, k + `aliv, k + l, k + l + `aliv, l + m) jsou umístěné kde, netušíte? Dévanágarí jich má mít také mnoho. Vzhledem k tomu, že slitky nejsou povinné, v arabštině l + `aliv povinné je, ostatní již ne; fi, ti v češtině záleží na druhu slova - tak si nedovedu představit, že by se to dělalo automaticky.

Jak to funguje nevím. OpenType zná automatické kontextové použití ligatur, podrobnosti však neznám.

lopata

Re:Je utf8 univerzální?
« Odpověď #19 kdy: 05. 07. 2018, 04:22:34 »
Krátká odpověď: ANO
Dlouhá odpověď: můžeš narazit na problémy u málo používaných dialektů asijských jazyků. Viz https://www.unicode.org/faq/han_cjk.html#6


x14

  • ***
  • 182
    • Zobrazit profil
    • E-mail
Re:Je utf8 univerzální?
« Odpověď #20 kdy: 05. 07. 2018, 05:40:27 »
Jakmile to má na začátku 'u', tak je to v cajku.  ;D
Pak to je to nejspíš Unicode a Unicode je jen jeden. Co v něm není, není.
A Číňani jsou připraveni na to, že tam může něco chybět. Mají to tak rádi. Rozhodně se to nemůže stát u normální čínštiny.
Různé UTF jsou jen otázka přesypání dat. Nic se nemůže ztratit. To číslo v podstatě znamená po kolika bajtech se má konzumovat vstup, aby se na náhodou nepřešlo ukončení textu.
UTF8 je pro nás super, protože vypadá jako ASCII. Pokud by v tom měl být delší 'asijský text', tak to asi bude zbytečně prodlužovat.
Jenže, těch pár bajtů nikoho to nezajímá  :) :) :) Nebo zajímá?
http://utf8everywhere.org/
Doporučuji hlavně bod 3.
« Poslední změna: 05. 07. 2018, 05:44:21 od x14 »

borekz

  • ****
  • 492
    • Zobrazit profil
    • E-mail
Re:Je utf8 univerzální?
« Odpověď #21 kdy: 05. 07. 2018, 07:24:32 »
Původní specifikace UTF-8 měla na znak 1-6 bajtů. Jak to je u knihoven jestli počítají s tímto nebo už jen s novější specifikací, omezenou na 4 bajty nevím - jen pro upřesnění.
Myslel jsem codepoint 32bitů. Tzn. jen čistý obsah bez "úvodních" bitů. Serializované ve streamu to může mít těch 6 bajtů.

borekz

  • ****
  • 492
    • Zobrazit profil
    • E-mail
Re:Je utf8 univerzální?
« Odpověď #22 kdy: 05. 07. 2018, 07:26:28 »
Krátká odpověď: ANO
Dlouhá odpověď: můžeš narazit na problémy u málo používaných dialektů asijských jazyků. Viz https://www.unicode.org/faq/han_cjk.html#6
To už není problém Utf8, ale Unicode obecně.

sj

Re:Je utf8 univerzální?
« Odpověď #23 kdy: 05. 07. 2018, 07:58:23 »
Takže pro shrnutí - UTF-8 dokáže kompletně zakódovat celé Unicode. Unicode samo o sobě dokáže reprezentovat všechny znaky snad až možná na nějaké poloprivátní obskurnosti které tě nemusí zajímat.

Dříve (v době kdy Unicode bylo nadefinováno jako až 2 miliardy (nebo 4?) znaků - tj. 4 byty) tak mělo mít UTF-8 1-6 znaků, ale moderní UTF-8 má již jen 1-4 (pro 21 bitové Unicode). To dává cca 1 milion znaků v 17 Unicode planech. První je standardní a obsahuje i hodně znaků z Čínštiny, Japonštiny a Korejštiny, ale ne všechny (tedy v prvních 64k znacích nejsou všechny asijské znaky), druhý nebo třetí jsou věnovány asijským znakům. Pak tam jsou někde i emoji.

Na Windows se používá často UTF-16, které vypadá že je fixní 2 bytové délky, ale pro reprezentaci znaků dál než 64k, používá tzv. surrogate pairs (coz znamená že některé znaky jsou ilegální bez svého párového doplňku).

Pro tvoji potřebu je jednoznačně správně použít UTF-8, a neřešit ani věci jako že možná některým asijským jazykům to zabere trochu více bytů, jak ukazuje ten odkaz na utf8everywhere tak to stejně většinou není problém (třeba pokud je to HTML tak je tam kupa kratších znaků které to vybalancují).

Jen bych doporučil použít odladěné knihovní funkce pro práci s tím a případně převod do Unicodové reprezentace v paměti (pokud to rovnou není v programovacím jazyků který stringy v paměti ukládá jako UTF-8). Existuje i sada unit testů na parser, možná by stálo za to na ně mrknout a kouknout jaké edge případy se tam řeší (např. jak se zachovat k ilegálním znakům a sekvencím bytů).

Re:Je utf8 univerzální?
« Odpověď #24 kdy: 05. 07. 2018, 09:23:29 »
nakonec existuji ruzne sady znaku a ruzne lokalni variace, ktere unicode/utf nepokryva nebo pokryva chybne. pouziva se misto toho ucs
Nesmysl, UCS má stejné znaky a k nim přiřazené stejné kódy, jako Unicode. Praktický rozdíl je hlavně v tom, že UCS kódování mají pevnou délku znaku – UCS-2 má dva bajty a UCS-4 čtyři bajty. UCS-2 tedy umí vyjádřit pouze základní (původní) Unicode sadu, čímž se liší od UTF-16, které základní Unicode sadu vyjadřuje také pomocí dvou bajtů, ale pomocí náhradních párů umožňuje zapsat i znaky mimo BMP.

Kit

Re:Je utf8 univerzální?
« Odpověď #25 kdy: 05. 07. 2018, 09:48:43 »
Nejlepší bude, pokud vstupní sadu vůbec nespecifikuješ. Někdo tam chce vrazit ASCII, většina asi UTF-8, jiní UTF-16 nebo UCS-2. Když uděláš interní sadu aplikace Unicode, do které se všechna kódování na vstupu automaticky konvertují, bude to ideální.