{"id":23133,"date":"2016-12-04T13:03:29","date_gmt":"2016-12-04T13:03:29","guid":{"rendered":"http:\/\/www.inacreditavel.pt\/?p=23133"},"modified":"2016-12-04T14:03:41","modified_gmt":"2016-12-04T14:03:41","slug":"emoji-e-unicode","status":"publish","type":"post","link":"http:\/\/www.inacreditavel.pt\/?p=23133","title":{"rendered":"Emoji e Unicode"},"content":{"rendered":"<p>Estou a criar uma base de dados para guardar toda a informa\u00e7\u00e3o sobre emoji, nomeadamente, c\u00f3digos, nomes, significados, express\u00f5es emocionais.<\/p>\n<p>Estou a usar a <a href=\"http:\/\/unicode.org\/emoji\/charts\/full-emoji-list.html\">vers\u00e3o 4.0<\/a>, o standard mais recente de representa\u00e7\u00e3o de emoji em Unicode.<\/p>\n<p>Na especifica\u00e7\u00e3o do Unicode, os c\u00f3digos dos emoji v\u00eam indicados em utf32, mas nos textos da net@ que usam emoji, estes s\u00e3o codificados em utf8. A convers\u00e3o \u00e9 simples, e pode ser resumida como indicado abaixo:<\/p>\n<p>Os carateres ASCII, com c\u00f3digos de 0 a 127, s\u00e3o representados apenas por um octeto.<br \/>\nNos carateres com mais do que um octeto, o 2\u00ba, 3\u00ba e 4\u00ba octetos UTF-8 come\u00e7am com 2, 3 ou 4 bits a um, seguidos de um bit a zero. Os octetos seguintes come\u00e7am sempre com o padr\u00e3o de dois bits <code>10<\/code>, sendo os restantes 6 bits usados para dados.<\/p>\n<pre>1-byte UTF-8 = 0xxxxxxx<sub>bin<\/sub> = 7 bits = 0-7F<sub>hex<\/sub>\r\n2-byte UTF-8 = 110xxxxx 10xxxxxx<sub>bin<\/sub> = 5+6(11) bits = 80-7FF<sub>hex<\/sub>\r\n3-byte UTF-8 = 1110xxxx 10xxxxxx 10xxxxxx<sub>bin<\/sub> = 4+6+6(16) bits = 800-FFFF<sub>hex<\/sub>\r\n4-byte UTF-8 = 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx<sub>bin<\/sub> = 3+6+6+6(21) bits = 10000-10FFFF<sub>hex<\/sub><sup>\u2020<\/sup>\r\n\r\n<sup>\u2020<\/sup>Os c\u00f3digos Unicode n\u00e3o est\u00e3o definidos para cima de 10FFFF<sub>hex<\/sub>.<\/pre>\n<p>Exemplos de convers\u00e3o de utf32 para utf8:<\/p>\n<pre>U+006D = 1101101<sub>bin<\/sub> = <b>0<\/b>1101101<sub>bin<\/sub> = 6D<sub>hex<\/sub>\r\nU+0416 = 10000 010110<sub>bin<\/sub> = <b>110<\/b>10000 <b>10<\/b>010110<sub>bin<\/sub> = D0 96<sub>hex<\/sub>\r\nU+4E3D = 0100 111000 111101<sub>bin<\/sub> = <b>1110<\/b>0100 <b>10<\/b>111000 <b>10<\/b>111101<sub>bin<\/sub> = E4 B8 BD<sub>hex<\/sub><\/pre>\n<p>O meu objetivo \u00e9 analisar textos originais em utf8 e classific\u00e1-los de acordo com os atributos dos emoji.<\/p>\n<p>Tenho algumas d\u00favidas sobre como devo armazenar os c\u00f3digos na base de dados. Vou guardar toda a informa\u00e7\u00e3o original que consta no standard, mas vou tamb\u00e9m ter um campo com os carateres codificados em utf8 para compara\u00e7\u00e3o imediata, com as p\u00e1ginas a analisar na net@. Provavelmente a melhor solu\u00e7\u00e3o \u00e9 usar um campo do tipo <code>CHAR(1) CHARSET utf8<\/code>, ao inv\u00e9s de guard\u00e1-los como uma sequ\u00eancia de octetos bin\u00e1rios, pois os textos a analisar s\u00e3o isso mesmo: texto.<\/p>\n<p>Vou avan\u00e7ar assim. Se for necess\u00e1rio, reformulo e come\u00e7o tudo de novo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Estou a criar uma base de dados para guardar toda a informa\u00e7\u00e3o sobre emoji, nomeadamente, c\u00f3digos, nomes, significados, express\u00f5es emocionais. Estou a usar a vers\u00e3o 4.0, o standard mais recente de representa\u00e7\u00e3o de emoji em Unicode. Na especifica\u00e7\u00e3o do Unicode, os c\u00f3digos dos emoji v\u00eam indicados em utf32, mas nos textos da net@ que usam [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/www.inacreditavel.pt\/index.php?rest_route=\/wp\/v2\/posts\/23133"}],"collection":[{"href":"http:\/\/www.inacreditavel.pt\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.inacreditavel.pt\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.inacreditavel.pt\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.inacreditavel.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=23133"}],"version-history":[{"count":6,"href":"http:\/\/www.inacreditavel.pt\/index.php?rest_route=\/wp\/v2\/posts\/23133\/revisions"}],"predecessor-version":[{"id":23139,"href":"http:\/\/www.inacreditavel.pt\/index.php?rest_route=\/wp\/v2\/posts\/23133\/revisions\/23139"}],"wp:attachment":[{"href":"http:\/\/www.inacreditavel.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=23133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.inacreditavel.pt\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=23133"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.inacreditavel.pt\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=23133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}