<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>UTF-8 on Jefferson Oliveira</title><link>https://jeffersonmourak.com/tags/utf-8/</link><description>Recent content in UTF-8 on Jefferson Oliveira</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>All content provided by this website are my own opinons and beliefs and are distrubuted under the &lt;br/></copyright><lastBuildDate>Thu, 07 Aug 2025 10:29:04 -0300</lastBuildDate><atom:link href="https://jeffersonmourak.com/tags/utf-8/index.xml" rel="self" type="application/rss+xml"/><item><title>A Evolução da Escrita Digital - Do ASCII às Maravilhas do UTF-8</title><link>https://jeffersonmourak.com/blog/unicode/</link><pubDate>Thu, 07 Aug 2025 10:29:04 -0300</pubDate><guid>https://jeffersonmourak.com/blog/unicode/</guid><category domain="https://jeffersonmourak.com/tags/unicode/">Unicode</category><category domain="https://jeffersonmourak.com/tags/ascii/">ASCII</category><category domain="https://jeffersonmourak.com/tags/utf-8/">UTF-8</category><category>Data types</category><category>Data encoding</category><category>Character encoding</category><category>Binary</category><category>Shift JIS</category><category>Mojibake</category><category>Unicode Consortium</category><description>&lt;p>Já imaginou como computadores transformam letras, números e emojis em zeros e uns que eles possam entender? Assim como nós, humanos, atribuímos significados às letras do alfabeto, o computador faz o mesmo. Vamos explorar aqui dois dos padrões mais populares de codificação de texto.&lt;/p>
&lt;h3 id="ascii">ASCII&lt;/h3>
&lt;p>Desenvolvido na década de 1960, o ASCII (American Standard Code for Information Interchange) tem uma premissa bem simples: usando apenas 7 bits, consegue-se representar 127 números, deixando reservados os primeiros 32 números da sequência para comandos importantes de escrita. O restante é preenchido com letras, números e alguns caracteres de pontuação.&lt;/p></description><content:encoded><![CDATA[<p>Já imaginou como computadores transformam letras, números e emojis em zeros e uns que eles possam entender? Assim como nós, humanos, atribuímos significados às letras do alfabeto, o computador faz o mesmo. Vamos explorar aqui dois dos padrões mais populares de codificação de texto.</p>
<h3 id="ascii">ASCII</h3>
<p>Desenvolvido na década de 1960, o ASCII (American Standard Code for Information Interchange) tem uma premissa bem simples: usando apenas 7 bits, consegue-se representar 127 números, deixando reservados os primeiros 32 números da sequência para comandos importantes de escrita. O restante é preenchido com letras, números e alguns caracteres de pontuação.</p>
<p>As pessoas envolvidas no desenvolvimento do padrão fizeram de tal forma que a sequência do alfabeto pudesse ajudar na decodificação.</p>
<p>Por exemplo, o caractere do número &ldquo;0&rdquo; é o número <strong>48</strong>, que, representado em 7 bits, fica <code>011 0000</code>.
Assim como:</p>
<p>1 → <code>011 0001</code></p>
<p>2 → <code>011 0010</code></p>
<p>3 → <code>011 0011</code></p>
<p>Se notarem, os últimos 4 bits estão em sequência. Logo, para descobrir em ASCII qual o inteiro, é só subtrair 011 0000 (decimal: 48).</p>
<p>Da mesma forma, as letras do alfabeto: &ldquo;A&rdquo; é <strong>65</strong> → 100 0001 e o &ldquo;a&rdquo; é <strong>97</strong> → 110 0001. Com isso, era possível codificar todas as letras do alfabeto inglês 🇬🇧.</p>
<p><em>Interactive Observable notebook widget &mdash; <a href="https://jeffersonmourak.com/blog/unicode/">view it on the blog</a>.</em></p>
<!-- <p><em>Interactive Observable notebook: <code>unicode</code> (cells: <code>ascii</code>) &mdash; <a href="https://jeffersonmourak.com/blog/unicode/">view it on the blog</a>.</em></p>
 -->
<p><em>&hellip; enquanto isso no resto do mundo &hellip;</em></p>
<figure class="full-width">
  <img src="https://media1.giphy.com/media/v1.Y2lkPTc5MGI3NjExZzNvcXQ4aTBpNGs5YWI3czdjeXBuaTU0dmw3eG44aWNxbTFxbzBieSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3oz8xQBcUXftkrlmmc/giphy.gif" alt="Cena da série animada South Park" loading="lazy">
  <figcaption>Cena da série animada South Park</figcaption>
</figure><p>Como já era de imaginar, com o avanço da tecnologia e da capacidade dos computadores, cada país utilizou essa capacidade extra para codificar seus próprios caracteres. O Japão, por exemplo, nem o ASCII usou. Outros codificadores, como o Shift JIS, utilizavam múltiplos bytes, e com tudo isso gerou-se uma gigantesca incompatibilidade.</p>
<blockquote>
<p>Curiosidade:
No Japão, existe a palavra mojibake (文字化け), que significa &ldquo;caractere distorcido&rdquo;. Isso acontecia devido aos problemas de codificação entre todos os alfabetos japoneses e também o latino.</p></blockquote>
<p>Porém, mesmo com toda essa incompatibilidade durante os anos 1980 e 1990, quais eram as chances de uma empresa de Londres ter que mandar documentos constantemente para o Japão? Naquela época, a solução era simples: imprima e envie por fax!</p>
<figure class="full-width">
  <img src="https://media4.giphy.com/media/v1.Y2lkPTc5MGI3NjExY2IzdGtqeHVmemRsZ2cwYTliY2trM2Zla3M2bXZndHF1eHE5b2NkciZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/xT5LMKZ9tnioMLEjBe/giphy.gif" alt="Cena da série animada Os Simpsons" loading="lazy">
  <figcaption>Cena da série animada Os Simpsons</figcaption>
</figure><p>Então chegou a internet, e o que era ruim ficou ainda pior&hellip; Agora temos que lidar com documentos sendo enviados pela internet constantemente, e com o tempo foi formado o:</p>
<h2 id="unicode-consortium">Unicode Consortium</h2>
<p>E como em um evento que pode se chamar de milagre do bom senso, durante as últimas décadas, foi formado um padrão com 154.998 caracteres, que cobre toda e qualquer língua que você possa imaginar: árabe, japonês, cirílico, chinês, coreano e até hieróglifos egípcios.</p>
<p>O que eles fizeram de forma simplificada foi pegar centenas de milhares de números e atribuí-los a centenas de milhares de caracteres, ou seja, o número 35307 representará o caractere japonês 觫, o número 963 representará σ e assim por diante.</p>
<h3 id="utf-8">UTF-8</h3>
<p>Perfeito, agora nós temos centenas de milhares de números para representar todo e qualquer caractere, mas como vamos fazer isso com binário?</p>
<p>Para representar um número nessas proporções, vamos precisar de pelo menos 32 bits para representar qualquer número dessa magnitude, o que agora trouxe problemas para o alfabeto inglês, porque o Unicode é compatível com ASCII, ou seja, &ldquo;A&rdquo; ainda é <strong>65</strong> e &ldquo;a&rdquo; ainda é <strong>97</strong>. Mas quando olhamos para o binário de 32 bits desses números, agora usamos 4x mais espaço para representar os mesmos caracteres.</p>
<table>
  <thead>
      <tr>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td><strong>1</strong></td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td><strong>1</strong></td>
          <td></td>
          <td><strong>A</strong></td>
      </tr>
      <tr>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td><strong>1</strong></td>
          <td><strong>1</strong></td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td><strong>1</strong></td>
          <td></td>
          <td><strong>a</strong></td>
      </tr>
  </tbody>
</table>
<p>Contando acima, há 25 zeros seguidos que estarão presentes em todo texto que utilizar caracteres latinos, e esse é só o primeiro dos nossos problemas. O segundo é que alguns sistemas antigos interpretam uma sequência de 8 zeros [<code>NULL</code>] como fim de caractere, o famoso <code>\0</code> do C.</p>
<p>Então entra o UTF-8. A primeira coisa é: se a letra tiver numeração abaixo de 127, então você representa exatamente igual ao ASCII.</p>
<p>Logo, o primeiro problema está resolvido: &ldquo;A&rdquo; ainda é <strong>65</strong> e cabe em 8 bits. <code>01000001</code>.</p>
<p>E para números maiores que 127? Para isso você vai quebrar seu binário em 2 bytes.</p>
<table>
  <thead>
      <tr>
          <th>1</th>
          <th>2</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>110xxxxx</code></td>
          <td><code>10xxxxxx</code></td>
      </tr>
  </tbody>
</table>
<p>No byte 1, você tem o cabeçalho <code>110</code>, que significa que esse caractere foi quebrado em 2 bytes.
No byte 2, você começa com o cabeçalho de continuidade <code>10</code>. Todos os outros bits restantes você vai preencher com o número que você quer representar.</p>
<p>Para calcular, é só remover os cabeçalhos, unir todos os bits e o número resultante é o caractere Unicode. Você pode fazer isso até 4096. Passou disso? Sem problemas! Usando o cabeçalho <code>1110</code> + 2 bytes, você tem 16 bits.</p>
<table>
  <thead>
      <tr>
          <th>1</th>
          <th>2</th>
          <th>3</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>1110xxxx</code></td>
          <td><code>10xxxxxx</code></td>
          <td><code>10xxxxxx</code></td>
      </tr>
  </tbody>
</table>
<p>Quer ir além? Tudo bem! O padrão suporta até o cabeçalho <code>1111110x</code> + 6 bytes de continuidade.</p>
<h3 id="codificando-utf-8">Codificando UTF-8</h3>
<p><em>Interactive Observable notebook widget &mdash; <a href="https://jeffersonmourak.com/blog/unicode/">view it on the blog</a>.</em></p>
<p>É incrível como esse padrão consegue entregar:</p>
<ul>
<li>
<p>É compatível com os sistemas anteriores;</p>
</li>
<li>
<p>Não gasta espaço;</p>
</li>
<li>
<p>E em nenhum momento na vida haverá 8 zeros seguidos em nenhuma parte de qualquer byte.</p>
</li>
</ul>
<p>Além disso, outra razão que o fez se tornar o padrão mundial hoje em dia é que, para se mover entre caracteres, se você não sabe onde está, é só procurar o próximo cabeçalho, não precisa de índice.</p>
<p>Já fazem alguns anos que o UTF-8 virou o padrão em toda comunicação pela internet, e o fato de hoje a pessoa japonesa média não precisar se preocupar com mojibake mais é por causa desse método genial de codificar texto.</p>
<h2 id="referencias">Referencias</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=MijmeoH9LT4">Characters, Symbols and the Unicode Miracle - Computerphile (YouTube)</a></li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc3629">UTF-8, a transformation format of ISO 10646 - ietf.org</a></li>
<li><a href="https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/">The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) - Joel Spolsky</a></li>
</ul>
]]></content:encoded></item><item><title>The Evolution of Digital Writing - From ASCII to the Wonders of UTF-8</title><link>https://jeffersonmourak.com/blog/unicode-en/</link><pubDate>Thu, 07 Aug 2025 10:29:04 -0200</pubDate><guid>https://jeffersonmourak.com/blog/unicode-en/</guid><category domain="https://jeffersonmourak.com/tags/unicode/">Unicode</category><category domain="https://jeffersonmourak.com/tags/ascii/">ASCII</category><category domain="https://jeffersonmourak.com/tags/utf-8/">UTF-8</category><description>&lt;blockquote>
&lt;p>Hey Y&amp;rsquo;all! This is a translation of my blog post originally written in Portuguese.&lt;/p>&lt;/blockquote>
&lt;p>Have you ever wondered how computers transform letters, numbers, and emojis into zeros and ones that they can understand? Just like us humans assign meanings to letters of the alphabet, the computer does the same. Let&amp;rsquo;s explore here two of the most popular text encoding standards.&lt;/p>
&lt;h2 id="ascii">ASCII&lt;/h2>
&lt;p>Developed in the 1960s, ASCII (American Standard Code for Information Interchange) has a very simple premise: using only 7 bits, you can represent 127 numbers, reserving the first 32 numbers in the sequence for important writing commands. The rest is filled with letters, numbers, and some punctuation marks.&lt;/p></description><content:encoded><![CDATA[<blockquote>
<p>Hey Y&rsquo;all! This is a translation of my blog post originally written in Portuguese.</p></blockquote>
<p>Have you ever wondered how computers transform letters, numbers, and emojis into zeros and ones that they can understand? Just like us humans assign meanings to letters of the alphabet, the computer does the same. Let&rsquo;s explore here two of the most popular text encoding standards.</p>
<h2 id="ascii">ASCII</h2>
<p>Developed in the 1960s, ASCII (American Standard Code for Information Interchange) has a very simple premise: using only 7 bits, you can represent 127 numbers, reserving the first 32 numbers in the sequence for important writing commands. The rest is filled with letters, numbers, and some punctuation marks.</p>
<p>The people involved in developing the standard did it in such a way that the alphabet sequence could help with decoding.</p>
<p>For example, the character for the number &ldquo;0&rdquo; is <strong>48</strong>, which, represented in 7 bits, becomes <code>011 0000</code>.
Just like:</p>
<p>1 → <code>011 0001</code></p>
<p>2 → <code>011 0010</code></p>
<p>3 → <code>011 0011</code></p>
<p>If you notice, the last 4 bits are in sequence. So, to find out what the integer is in ASCII, you just subtract 011 0000 (decimal: 48).</p>
<p>In the same way, the letters of the alphabet: &ldquo;A&rdquo; is <strong>65</strong> → 100 0001 and &ldquo;a&rdquo; is <strong>97</strong> → 110 0001. With this, it was possible to encode all the letters of the English alphabet 🇬🇧.</p>
<p><em>Interactive Observable notebook widget &mdash; <a href="https://jeffersonmourak.com/blog/unicode-en/">view it on the blog</a>.</em></p>
<p><em>&hellip; meanwhile in the rest of the world &hellip;</em></p>
<figure class="full-width">
  <img src="https://media1.giphy.com/media/v1.Y2lkPTc5MGI3NjExZzNvcXQ4aTBpNGs5YWI3czdjeXBuaTU0dmw3eG44aWNxbTFxbzBieSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/3oz8xQBcUXftkrlmmc/giphy.gif" alt="Scene from South Park series" loading="lazy">
  <figcaption>Scene from South Park series</figcaption>
</figure><p>As you might imagine, with the advancement of technology and computer capacity, each country used this extra capacity to encode their own characters. Japan, for example, didn&rsquo;t even use ASCII. Other encoders, like Shift JIS, used multiple bytes, and with all this, a gigantic incompatibility was generated.</p>
<blockquote>
<p>Fun fact:
In Japan, there&rsquo;s the word mojibake (文字化け), which means &ldquo;distorted character&rdquo;. This happened due to encoding problems between all Japanese alphabets and also the Latin one.</p></blockquote>
<p>However, even with all this incompatibility during the 1980s and 1990s, what were the chances of a London company having to constantly send documents to Japan? At that time, the solution was simple: print and send by fax!</p>
<figure class="full-width">
  <img src="https://media4.giphy.com/media/v1.Y2lkPTc5MGI3NjExY2IzdGtqeHVmemRsZ2cwYTliY2trM2Zla3M2bXZndHF1eHE5b2NkciZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/xT5LMKZ9tnioMLEjBe/giphy.gif" alt="Scene from The Simpsons Series" loading="lazy">
  <figcaption>Scene from The Simpsons Series</figcaption>
</figure><p>Then the internet came, and what was bad got even worse&hellip; Now we have to deal with documents being constantly sent over the internet, and over time the following was formed:</p>
<h2 id="unicode-consortium">Unicode Consortium</h2>
<p>And as in an event that could be called a miracle of common sense, over the last few decades, a standard was formed with 154,998 characters, covering every language you can imagine: Arabic, Japanese, Cyrillic, Chinese, Korean, and even Egyptian hieroglyphs.</p>
<p>What they did in a simplified way was take hundreds of thousands of numbers and assign them to hundreds of thousands of characters, that is, the number 35307 will represent the Japanese character 觫, the number 963 will represent σ, and so on.</p>
<h3 id="utf-8">UTF-8</h3>
<p>Perfect, now we have hundreds of thousands of numbers to represent every possible character, but how are we going to do this with binary?</p>
<p>To represent a number in these proportions, we&rsquo;ll need at least 32 bits to represent any number of that magnitude, which now brought problems for the English alphabet, because Unicode is compatible with ASCII, meaning &ldquo;A&rdquo; is still <strong>65</strong> and &ldquo;a&rdquo; is still <strong>97</strong>. But when we look at the 32-bit binary of these numbers, we now use 4x more space to represent the same characters.</p>
<table>
  <thead>
      <tr>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td><strong>1</strong></td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td><strong>1</strong></td>
          <td></td>
          <td><strong>A</strong></td>
      </tr>
      <tr>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td><strong>1</strong></td>
          <td><strong>1</strong></td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td>0</td>
          <td><strong>1</strong></td>
          <td></td>
          <td><strong>a</strong></td>
      </tr>
  </tbody>
</table>
<p>Counting above, there are 25 consecutive zeros that will be present in every text that uses Latin characters, and that&rsquo;s just the first of our problems. The second is that some old systems interpret a sequence of 8 zeros [<code>NULL</code>] as the end of a character, the famous <code>\0</code> in C.</p>
<p>So UTF-8 comes in. The first thing is: if the letter has a number below 127, then you represent it exactly the same as ASCII.</p>
<p>So the first problem is solved: &ldquo;A&rdquo; is still <strong>65</strong> and fits in 8 bits. <code>01000001</code>.</p>
<p>And for numbers greater than 127? For that, you&rsquo;ll break your binary into 2 bytes.</p>
<table>
  <thead>
      <tr>
          <th>1</th>
          <th>2</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>110xxxxx</code></td>
          <td><code>10xxxxxx</code></td>
      </tr>
  </tbody>
</table>
<p>In byte 1, you have the header <code>110</code>, which means this character was broken into 2 bytes.
In byte 2, you start with the continuation header <code>10</code>. All other remaining bits you&rsquo;ll fill with the number you want to represent.</p>
<p>To calculate, just remove the headers, join all the bits, and the resulting number is the Unicode character. You can do this up to 4096. Beyond that? No problem! Using the header <code>1110</code> + 2 bytes, you have 16 bits.</p>
<table>
  <thead>
      <tr>
          <th>1</th>
          <th>2</th>
          <th>3</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>1110xxxx</code></td>
          <td><code>10xxxxxx</code></td>
          <td><code>10xxxxxx</code></td>
      </tr>
  </tbody>
</table>
<p>Want to go further? That&rsquo;s fine! The standard supports up to the header <code>1111110x</code> + 6 continuation bytes.</p>
<h3 id="encoding-utf-8">Encoding UTF-8</h3>
<p><em>Interactive Observable notebook widget &mdash; <a href="https://jeffersonmourak.com/blog/unicode-en/">view it on the blog</a>.</em></p>
<p>It&rsquo;s amazing how this standard manages to deliver:</p>
<ul>
<li>
<p>It&rsquo;s compatible with previous systems;</p>
</li>
<li>
<p>It doesn&rsquo;t waste space;</p>
</li>
<li>
<p>And at no point in life will there be 8 consecutive zeros in any part of any byte.</p>
</li>
</ul>
<p>Additionally, another reason that made it become the world standard today is that, to move between characters, if you don&rsquo;t know where you are, you just look for the next header, you don&rsquo;t need an index.</p>
<p>It&rsquo;s been several years since UTF-8 became the standard in all internet communication, and the fact that today the average Japanese person doesn&rsquo;t need to worry about mojibake anymore is because of this brilliant method of encoding text.</p>
<h2 id="references">References</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=MijmeoH9LT4">Characters, Symbols and the Unicode Miracle - Computerphile (YouTube)</a></li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc3629">UTF-8, a transformation format of ISO 10646 - ietf.org</a></li>
<li><a href="https://joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/">The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) - Joel Spolsky</a></li>
</ul>
]]></content:encoded></item></channel></rss>