Unicode ก๊กเฮงแซ่แต้ Игорь Лукашев 徐順宏 Vladimir Jelicačačić Bjørn Vestergård Adaptado por Antonio Carlos Souza Overview • Não é filho do ASCII – 8 bit characters – ASCII – O resto do mundo acordou pra o micro • Unicode – Atualmente na versão 6.0 – 107 mil caracteres – Código dos caracteres – Diferentes regiões • Encoding and Decoding classes • Example The Good Old Days • • • • • • • Foco na falta de acento, English letters Cada letra, número, controle, etc Representado por codes 0-127 Espaço, 32; “A”, 65; “a”, 97 Uso de 7 bits, 1 bit livre para muitos computers Wordstar and the 8th bit Below 32 – control bits 7, beep; 12, formfeed 8th bit, values 128-255 • Cada um tinha sua própria idéia • IBM-PC -> graphics (horizontal bars, vertical bars, bars with dangles, etc.) • Outside U.S. different languages – Code 130 8th bit, values 128-255 • Code pages – definição regional of bit values 128-255 – Israel: Code page 862 – Greek: Code page 737 – ISO/ANSI code pages • Asia – Alphabets had thousands of characters – No way to store in one byte (8 bits) Unicode • Not a 16-bit code • A new way of thinking about characters • Old way: – Character “A” maps to memory or disk bits – A-> 0100 0001 • Unicode way: – – – – Each letter in every alphabet maps to a “code point” Abstract concept “A” is Platonic “form” – just floats out there A -> U+0639 code point Unicode • Hello -> U+0048 U+0065 U+006C U+006C U+006F • Storing in 2 bytes each: – 0048 0065 006C 006C 006F (big endian) – Or 4800 6500 6C00 6C00 6F00 (little endian) • Necessário ter um Byte Order Mark (BOM) no início do Stream • UTF (Formato de Transformação Unicode, do inglês Unicode Transformation Format) • UCS (Conjunto Universal de Caracteres, do inglês Universal Character Set) Unicode • Sistema de codificação UTF8 – – – – Stores Unicode points (magic numbers) as 8 bit bytes Values 0-127 go into byte 1 Values 128+ go into bytes 2, 3, etc. Caracter até 127, UTF8 é similar ao ASCII • A UTF-7 é uma codificação não tão popular usada para a codificação em 7 bits, e é normalmente considerada obsoleta. • Pode ser usada quando há restrições a caracteres com o oitavo bit ligado; por exemplo, quando só se podem usar caracteres ASCII válidos. UNICODE Encodings • UTF-8 • UTF-16 – characters stored in 2 byte, 16-bit (halfword) sequences – also called UTF-2 • UTF-32 – characters stored in 4byte, 32 bit sequences • UTF-7 – forces a zero in high order bit - firewalls • Ascii Encoding – everything above 7 bits is dropped Definitions • .NET uses UTF-16 encoding internally to store text • Correio eletrônico - MIME • Encoding: – Transfere um conjunto de caracteres Unicode em uma sequência de bytes – Envia uma string para um arquivo ou stream de rede • Decoding: – Transfere uma sequencia de bytes em um conjunto de Caracteres Unicode – Lendo uma string de um arquivo ou network stream • StreamReader, StreamWriter default to UTF-8 Encoding/Decoding Classes • UTF32Encoding class – Convert characters to and from UTF-32 encoding • UnicodeEncoding class – Convert characters to and from UTF-16 encoding • UTF8Encoding class to convert to and from UTF-8 encoding – 1, 2, 3, or 4 bytes per char • ASCIIEncoding class to convert to and from ASCII Encoding – drops all values > 127 • System.Text.Encoding supports a wide range of ANSI/ISO encodings Convert a string into a stream of encoded bytes 1. Get an encoding object Encoding e = Encoding.GetEncoding(“Korean”); 2. use the encoding object’s GetBytes() method to convert a string into its byte representation byte[ ] encoded; encoded = e.GetBytes(“I’m gonna be Korean!”); Demo: D:\_Framework 2.0 Training Kits\70-536\Chapter 03\EncodingDemo Escrevendo um arquivo no formato encoded FileStream fs = new FileStream("text.txt", FileMode.OpenOrCreate); ... StreamWriter t = new StreamWriter (fs, Encoding.UTF8); t. Write("This is in UTF8"); Lendo um arquivo encoded FileStream fs = new FileStream("text.txt", FileMode.Open); ... StreamReader t = new StreamReader(fs, Encoding.UTF8); String s = t.ReadLine(); Conclusão • ASCII é um dos padrões mais velhos. • UNICODE prove suporte multilingua. • System.Text.Encoding tem métodos estáticos para encoding and decoding text. • Use an overloaded Stream constructor that accepts an encoding object when writing a file. • Not necessary to specify Encoding object when reading, will default. References • www.unicode.org • Unicode and .Net – what does .NET Provide? http://www.developerfusion.co.uk/show/4710/3/ • Hello Unicode, Goodbye ASCII http://www.nicecleanexample.com/ViewArticle.a spx?TID=unicode_encoding • The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) http://www.joelonsoftware.com/articles/Unicode. html