Je utf8 univerzální?

A. F.

Je utf8 univerzální?
« kdy: 04. 07. 2018, 19:27:19 »
Zdravím.

Předpokládejme, že mám systém, který texty načítá z nějakého souboru. Aspiruju na mezinárodní trh.

Otázka: mohu prohlásit, že obsah toho textového souboru musí být v utf8? Pokryje to všechny normální jazyky a písma na světě (tedy třeba minojština mě až tak netrápí). Nebo naopak mohu narazit třeba u Japonštiny? Čínštiny? Kde jsou hranice?

Děkuji za odpověď.


foo

Re:Je utf8 univerzální?
« Odpověď #1 kdy: 04. 07. 2018, 19:37:31 »
pro zacatek narazis u japonskych/cinskych pisem

JardaH

Re:Je utf8 univerzální?
« Odpověď #2 kdy: 04. 07. 2018, 19:47:04 »
Kde jsou hranice?

UTF-8 se snaží napasovat Unicode nad ASCII kódování, pro uložení textového souboru. UTF-8 se pak načte do paměti, kde se reprezentuje 4bytově little nebo big engian podle platformy. Je třeba také uvažovat o směru textu zleva doprava i obráceně.

Hranice může nastat při použítí textově orientovaných utilitek, kde se s UTF nepočítá a s knihovnami třetích stran pro zpracovaní nějakých datových struktur, kde může docházet k nějakým neplechám, kvůli potencionálně neplatným sekvencím bytů...

A. F.

Re:Je utf8 univerzální?
« Odpověď #3 kdy: 04. 07. 2018, 20:17:01 »
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?
« Poslední změna: 04. 07. 2018, 20:20:41 od andreaw.fean »

A. F.

Re:Je utf8 univerzální?
« Odpověď #4 kdy: 04. 07. 2018, 20:19:24 »
Kde jsou hranice?

UTF-8 se snaží napasovat Unicode nad ASCII kódování, pro uložení textového souboru. UTF-8 se pak načte do paměti, kde se reprezentuje 4bytově little nebo big engian podle platformy. Je třeba také uvažovat o směru textu zleva doprava i obráceně.

Hranice může nastat při použítí textově orientovaných utilitek, kde se s UTF nepočítá a s knihovnami třetích stran pro zpracovaní nějakých datových struktur, kde může docházet k nějakým neplechám, kvůli potencionálně neplatným sekvencím bytů...

Zajímá mě pouze to získávání textu. Tedy řeknu uživateli: "sem piš co chceš, ale musí to být v utf8". Já si to následně zpracuju. Přičemž už je na mě, abych měl třeba kompletně unicode fonty atd.


Re:Je utf8 univerzální?
« Odpověď #5 kdy: 04. 07. 2018, 20:32:40 »
Unicode pokryje všechny normální jazyky a písma na světě – přesněji na Zemi :-) UTF-8 je jeden ze způsobů serializace Unicode. Tedy to, co potřebujete, pokryjete vstupem v UTF-8. Např. JSON je podle standardu vždy UTF-8, takže nebudete první, kdo toto kódování určí jako jedinou možnost. I zmíněné japonské nebo čínské znaky jsou pokryté Unicode, např. japonská Wikipedia používá Unicode. Akorát není v těchto zemích UTF-8 tak populární, jako v Evropě a Americe, protože japonské nebo čínské znaky kóduje neefektivně, oproti jiným kódováním. UTF-8 tedy můžete použít.

Unicoder

Re:Je utf8 univerzální?
« Odpověď #6 kdy: 04. 07. 2018, 21:10:47 »
Utf-8 muzete s klidem pouzit a zakodujete libovolny znak. Ma akorat promenlivou delku, casto pouzivane znaky latinky azbuky a alfabety jsou 1-2 bajtove, ostatni znaky maji bajtu vice. Je to jen zpusob kodovani cele Unicode mnoziny. Co vam chteli povedet je ze jedna vec je znak zakodovat a druha vec je ho zobrazit - cili potrebujete font co je obsahuje. A treti vec je ze pozor na knihovny  ci utilitky na zpracovani textu - ne vsechny umeji vicebajtovye znaky - hlavne bacha na regex.

borekz

  • ****
  • 492
    • Zobrazit profil
    • E-mail
Re:Je utf8 univerzální?
« Odpověď #7 kdy: 04. 07. 2018, 21:12:40 »
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?
To mě taky zajímá. UTF8 má rozsah 32 bitů a měly by tam být všechny Unicode znaky. Narazit lze leda v Javě, kde UTF8 má limit 16 bitů. To je ale vada Javy, ne UTF.

Re:Je utf8 univerzální?
« Odpověď #8 kdy: 04. 07. 2018, 21:34:51 »
UTF-16 a UTF-32 nicméně všechno na co jsem narazil se vešlo do UTF-8
GB 18030 je snad čínský unicode, ale nikdy jsem to neviděl

Mám podobné řešení, pokud nevím co to je, předpokládám, že UTF-8... pravděpodobnost shody je velmi vysoká.
Je jasné, že počet bajtů je variabilní a mnoho různých nástrojů může narazit o řazení ani nemluvím.

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?
To mě taky zajímá. UTF8 má rozsah 32 bitů a měly by tam být všechny Unicode znaky. Narazit lze leda v Javě, kde UTF8 má limit 16 bitů. To je ale vada Javy, ne UTF.
„Řemeslo se naučí každý. Umění nikdo.“
„Jednoduchost je nejvyšší úroveň sofistikovanosti.“
- Leonardo Da Vinci

Re:Je utf8 univerzální?
« Odpověď #9 kdy: 04. 07. 2018, 21:39:41 »
UTF8 má rozsah 32 bitů a měly by tam být všechny Unicode znaky. Narazit lze leda v Javě, kde UTF8 má limit 16 bitů. To je ale vada Javy, ne UTF.

Máte to trochu pomíchané. Unicode je 21 bitový. Pokud použiteje k zapsání unikodu UTF-8, pak jeden unicode znak je kódován pomocí jednoho až čtyř bajtů (což plně pokryje těch 21 bitů). Pokud použijete UTF-16, pak jeden unicode znak je kódován pomocí jednoho až dvou 16 bitových hodnot (což opět pokryje plně těch 21 bitů). Java používá UTF-16 a není to vada :-)

Re:Je utf8 univerzální?
« Odpověď #10 kdy: 04. 07. 2018, 21:56:55 »
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.

Re:Je utf8 univerzální?
« Odpověď #11 kdy: 04. 07. 2018, 22:27:08 »
V některých jazycích je UTF-8 neefektivní co se délky týče (narozdíl od češtiny například).
A když jsme u toho to české vyhledávání je strašný paskvil i když je to dle pravidel. Každý kdo si toho není vědom je naprosto zmaten. Obzvlášť v mobilech to každý hlásí jako "ten krám vůbec nefunguje - je to rozbitý".

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.
„Řemeslo se naučí každý. Umění nikdo.“
„Jednoduchost je nejvyšší úroveň sofistikovanosti.“
- Leonardo Da Vinci

Re:Je utf8 univerzální?
« Odpověď #12 kdy: 04. 07. 2018, 22:47:55 »
Ligatury?

P_V

  • ***
  • 227
    • Zobrazit profil
    • E-mail
Re:Je utf8 univerzální?
« Odpověď #13 kdy: 04. 07. 2018, 23:01:13 »
V některých jazycích je UTF-8 neefektivní co se délky týče (narozdíl od češtiny například).
Z hlediska velikosti souboru, pro jazyky používající latinku je vhodnější UTF-8 a pro nelatinské jazyky UTF-16.

A. F.

Re:Je utf8 univerzální?
« Odpověď #14 kdy: 04. 07. 2018, 23:18:59 »
Utf-8 muzete s klidem pouzit a zakodujete libovolny znak.
OK, díky.

Ma akorat promenlivou delku, casto pouzivane znaky latinky azbuky a alfabety jsou 1-2 bajtove, ostatni znaky maji bajtu vice. Je to jen zpusob kodovani cele Unicode mnoziny. Co vam chteli povedet je ze jedna vec je znak zakodovat a druha vec je ho zobrazit - cili potrebujete font co je obsahuje. A treti vec je ze pozor na knihovny  ci utilitky na zpracovani textu - ne vsechny umeji vicebajtovye znaky - hlavne bacha na regex.
Dobře, dobře, ale už je to mimo téma mé otázky :-)