<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Andreano Lanusse &#124; Tecnologia e Desenvolvimento de Software &#187; Unicode</title>
	<atom:link href="http://www.andreanolanusse.com/pt/tag/unicode/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andreanolanusse.com/pt</link>
	<description>Andreano Lanusse blog - acesse artigos, tutoriais e vídeos sobre tecnologia, desenvolvimento de software, técnicas de programação, banco de dados, jogos e mais.</description>
	<lastBuildDate>Wed, 25 Jan 2012 11:00:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Delphi Unicode – entendo os avisos (warning) do compilar sua aplicação</title>
		<link>http://www.andreanolanusse.com/pt/delphi-unicode-entendo-os-avisos-warning-do-compilar-sua-aplicacao/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=delphi-unicode-entendo-os-avisos-warning-do-compilar-sua-aplicacao</link>
		<comments>http://www.andreanolanusse.com/pt/delphi-unicode-entendo-os-avisos-warning-do-compilar-sua-aplicacao/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 01:37:56 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Unicode]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=654</guid>
		<description><![CDATA[<p>A partir do Delphi 2009 foi implementado o suporte a Unicode em todo o Delphi, caso você não esteja familiarizado com Unicode leia este post. Ao compilar sua aplicação alguns avisos (warning) serão emitidos pelo compilador, neste post vou esclarecer estas mensagens e o que você deve fazer para que elas não apareçam mais. O [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-618" style="border: 0pt none; margin: 4px;" title="Unicode" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2010/01/Ascender-Unicode-graphic-300x168.gif" alt="" width="300" height="168" />A partir do Delphi 2009 foi implementado o suporte a Unicode em todo o Delphi, caso você não esteja familiarizado com Unicode leia este <a href="http://www.andreanolanusse.com/pt/entendendo-unicode-para-migrar-sua-aplicacao-delphi/"><strong>post</strong></a>. Ao compilar sua aplicação alguns avisos (warning) serão emitidos pelo compilador, neste post vou esclarecer estas mensagens e o que você deve fazer para que elas não apareçam mais.</p>
<p>O código abaixo até versões do Delphi 2007, compilado em versões igual ou superiores ao Delphi 2009, receberá esta mensagem ao compilar:</p>
<p>W1050 WideChar reduced to byte char in set expressions. Consider using &#8216;CharInSet&#8217; function in &#8216;SysUtils&#8217; unit</p>
<pre class="brush: pascal;">var
  Status : Char;
begin

  if Status in [ 'a', 's', 'c']  then
  begin
    ...
  end;</pre>
<p>Para evitar este warning, você deverá passar a usar a função CharInSet.</p>
<pre class="brush: pascal;">var
  Status : Char;
begin

  if CharInSet(Status, ['a', 's', 'c']) then
  begin
    ...
  end;</pre>
<p>O código abaixo irá gerar a mensagem <strong>W1057 Implicit string cast from &#8216;ShortString&#8217; to &#8216;string&#8217;</strong></p>
<pre class="brush: pascal;">var
  s : ShortString;
  u : string;
begin
  u := s;
end;</pre>
<p>Para eliminar este mensagem basta fazer um cast da varíavel ShortString para String, este código será compatível com versões anteriores ao Delphi 2009.</p>
<pre class="brush: pascal;">var
  s : ShortString;
  u : string;
begin
  u := String(s);
end;</pre>
<p>A mesma situação se aplica para variáveis AnsiString gerando a mensagem <strong>W1057 Implicit string cast from &#8216;AnsiString&#8217; to &#8216;string&#8217;</strong></p>
<pre class="brush: pascal;">var
  a : AnsitString;
  u : string;
begin
  u := s;
end;</pre>
<p>Basta fazer um cast da variável AnsiString para String e a mensagem será eliminada.</p>
<pre class="brush: pascal;">var
  a : AnsitString;
  u : string;
begin
  u := AnsiString(s);
end;</pre>
<p>A mensagem <strong>W1058 Implicit string cast with potential data loss from &#8216;string&#8217; to &#8216;AnsiString&#8217;</strong> precisa ser analizada com cuidado, podemos fazer o cast e resolver o problema, mas você precisa saber o que está fazendo.</p>
<pre class="brush: pascal;">var
  a : AnsitString;
  u : string;
begin
  u := s;
end;</pre>
<p>Se você tem certeza que a variável <strong>a</strong> contém apenas caracteres Ansi, poderá fazer o cast sem problemas.</p>
<pre class="brush: pascal;">var
  a : AnsitString;
  u : string;
begin
  u := AnsiString(s);
end;</pre>
<p>Até aqui vimos as mensagens geradas pelo compilador, Unicode vai muito mais além e se você quiser exportar sua aplicação para países asiáticos por exemplo, terá que suportar Unicode, existem 3 artifos no EDN que eu recomendo a leitura, são eles:</p>
<ul>
<li> EDN Article: <a href="http://edn.embarcadero.com/article/38437" target="_blank">&#8220;Delphi in a Unicode World Part I: What is Unicode, Why do you need it, and How do you work with it in Delphi?&#8221;</a> by Nick Hodges</li>
<li> EDN Article: <a href="http://edn.embarcadero.com/article/38498" target="_blank">&#8220;Delphi in a Unicode World Part II: New RTL Features and Classes to Support Unicode&#8221;</a> by Nick Hodges</li>
<li> EDN Article: <a href="http://edn.embarcadero.com/article/38693" target="_blank">&#8220;Delphi in a Unicode World Part III: Unicodifying Your Code&#8221;</a> by Nick Hodges</li>
</ul>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/entendendo-unicode-para-migrar-sua-aplicacao-delphi/" title="Entendendo Unicode para migrar sua aplicação Delphi">Entendendo Unicode para migrar sua aplicação Delphi</a></li><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2011-disponivel-para-download/" title="Apresentações do Delphi Conference 2011 disponíveis para download">Apresentações do Delphi Conference 2011 disponíveis para download</a></li><li><a href="http://www.andreanolanusse.com/pt/white-paper-razoes-para-migrar-para-o-delphi-xe2-o-que-voce-pode-ter-perdido-desde-o-delphi-7/" title="White Paper: Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7">White Paper: Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7</a></li><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/delphi-unicode-entendo-os-avisos-warning-do-compilar-sua-aplicacao/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Entendendo Unicode para migrar sua aplicação Delphi</title>
		<link>http://www.andreanolanusse.com/pt/entendendo-unicode-para-migrar-sua-aplicacao-delphi/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=entendendo-unicode-para-migrar-sua-aplicacao-delphi</link>
		<comments>http://www.andreanolanusse.com/pt/entendendo-unicode-para-migrar-sua-aplicacao-delphi/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 13:22:33 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Unicode]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=613</guid>
		<description><![CDATA[<p>Um grande desafio para nossa equipe de R&#38;D foi incorporar o suporte a Unicode em toda a VCL, conseqüentemente no IDE, uma vez que Delphi é feito em Delphi. Durante todo o desenvolvimento do Delphi 2009, tivemos reuniões com várias empresas desenvolvedoras de componentes e Allen Bauer, Delphi Chief Scientist, através do seu blog comentou [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-618" style="border: 0pt none; margin: 4px;" title="Unicode" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2010/01/Ascender-Unicode-graphic.gif" alt="" width="300" height="168" />Um grande desafio para nossa equipe de R&amp;D foi incorporar o suporte a Unicode em toda a VCL, conseqüentemente no IDE, uma vez que Delphi é feito em Delphi.</p>
<p>Durante todo o desenvolvimento do Delphi 2009, tivemos reuniões com várias empresas desenvolvedoras de componentes e <a href="http://blogs.embarcadero.com/abauer/" target="_blank">Allen Bauer</a>, Delphi Chief Scientist, através do seu blog comentou sobre o suporte a Unicode. Estas iniciativas foram fundamentais para permitir que componentes de terceiros estejam disponíveis rapidamente para o Delphi 2009 e informar aos desenvolvedores como trabalhar com Unicode.</p>
<p style="text-align: center;">
<p style="text-align: center;"><em>Unicode é um padrão que permite aos computadores representar e manipular, de forma consistente, texto de qualquer sistema de escrita existente.</em></p>
<p style="text-align: center;"><strong><em>The Unicode Standard: Version 5.0. 5. ed. Addison-Wesley Professional, 2006. 1472 p</em></strong></p>
<p>Diversos conjuntos de caracteres como chineses, japoneses, russos e outros de origem asiáticas são representados através de Unicode, utilizando, na maioria dos casos, sistemas de mapeamento e codificação UTF (Formato de Transformação Unicode) e UCS (Conjunto Universal de Caracteres). Para maiores detalhes sobre Unicode, recomendo o seguinte link: http://pt.wikipedia.org/wiki/Unicode.</p>
<p>O resultado foi um Delphi 100% Unicode, sem exceção. Você deve estar se perguntando, a migração é tranqüila? Podemos dizer que sim, muita coisa foi tratada pela VCL e pelo compilador.</p>
<p>Uma das grandes mudanças foi nos tipos String, que anteriormente era baseado em padrão ANSI. Agora estão baseadas em padrão UNICODE. Os tipos AnsiString e WideString continuam funcionando da mesma forma, exceto para tamanho de dados.</p>
<p>Resumo das mudanças para Unicode:</p>
<ul>
<li>String mapeia UnicodeString e não mais AnsiString</li>
<li>Char agora mapeia WideChar (2 bytes e não 1 byte) e é um caractere UTF-16</li>
<li>PChar mapeia PWideChar</li>
<li>AnsiString mapeia o antigo tipo String</li>
</ul>
<p>Não ocorreram mudanças:</p>
<ul>
<li>AnsiString</li>
<li>WideString</li>
<li>AnsiChar, PAnsiChar</li>
<li>Short String contém elementos AnsiChar</li>
<li>Conversões implícitas continuam funcionando</li>
<li>O editor de código controla o modo de gravação (Unicode vs AnsiString), ambos continuam sendo suportados.</li>
</ul>
<p>Operações que não dependem do tamanho do caractere:</p>
<ul>
<li>Concatenação de Strings</li>
<li>Funções padrão para manipulação de Strings, exemplo: Lenght, Copy, Pos e outras.</li>
<li>Operadores, exemplos: &lt;string&gt; &lt;op. de comparação&gt; &lt;string&gt;, CompareStr(), CompareText(), etc.</li>
<li>FillChar ( &lt;struct or memory&gt; )</li>
<li>Windows API</li>
</ul>
<p>Operações que envolvem tamanho de caractere em bytes, talvez requeiram algumas mudanças, nada complicado, aqui vai uma dica, verifique código onde você:</p>
<ol>
<li>Assume que o Sizeof (Char) é 1.</li>
<li>Assume que o tamanho de uma string é igual ao número de bytes na string.</li>
<li>Manipula diretamente String ou PChars.</li>
<li>Grava ou lê string de/para um arquivo.</li>
</ol>
<p>Os itens 1 e 2 não valem para Unicode, porque para Unicode Sizeof (Char) são 2 bytes e o tamanho de uma string é duas vezes o número de bytes. Além disso, o código que lê e grava arquivos precisa entender o número correto de bytes para efetuar estas operações, pois um caractere não é mais representando por 1 byte.</p>
<p>Como vocês podem ver, a migração é muito tranqüila. O benefício de suportar Unicode é permitir que o desenvolvedor Delphi distribua as suas aplicações em todo o mundo. O Brasil hoje é um dos grandes desenvolvedores de software mundiais. Diversas empresas brasileiras distribuem as suas aplicações na China, Japão, Rússia e outros Países onde Unicode é fundamental.</p>
<p>Em 2007, o governo Russo adquiriu 1 milhão de licenças de Delphi, que serão utilizadas para ensinar alunos do 1º e 2º graus a desenvolver software com Delphi. Portanto, o suporte a Unicode é fundamental naquele País.</p>
<p>Para ajudar a conhecer todos os recursos do Delphi 2010 e auxiliar na migração disponibilizamos o <a href="http://www.embarcadero.com/rad-studio-2010-migration-center" target="_blank"><strong>RAD Studio Migration Center</strong></a>, onde você encontrará diversos materiais, como artigos e vídeos, divirtam-se.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/delphi-unicode-entendo-os-avisos-warning-do-compilar-sua-aplicacao/" title="Delphi Unicode – entendo os avisos (warning) do compilar sua aplicação">Delphi Unicode – entendo os avisos (warning) do compilar sua aplicação</a></li><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2011-disponivel-para-download/" title="Apresentações do Delphi Conference 2011 disponíveis para download">Apresentações do Delphi Conference 2011 disponíveis para download</a></li><li><a href="http://www.andreanolanusse.com/pt/white-paper-razoes-para-migrar-para-o-delphi-xe2-o-que-voce-pode-ter-perdido-desde-o-delphi-7/" title="White Paper: Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7">White Paper: Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7</a></li><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/entendendo-unicode-para-migrar-sua-aplicacao-delphi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

