<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
Ola monges,<br><br>Estou com uma pasta cheia de arquivos *.psd e um txt usado para modificar o nome dos arquivos.<br><br>O txt esta da seguinte forma:<br>001#nome_do_arquivo_001<br>002#nome_do_arquivo_002<br>003#nome_do_arquivo_003<br>....<br><br>E os arquivos nomeados da seguinte forma:<br>nome_do_arquivo_001.psd<br>nome_do_arquivo_002.psd<br>nome_do_arquivo_003.psd<br>...<br><br>O objetivo era renomear os arquivos com base no txt, onde o "nome_do_arquivo" fosse substituido pelo numero antes do #.<br>Algo como :<br><code><code><span style="color: #000000"><span style="color: #FF8000">#!/usr/bin/env perl<br><br></span><span style="color: #007700">use </span><span style="color: #0000BB">common</span><span style="color: #007700">::</span><span style="color: #0000BB">sense</span><span style="color: #007700">;<br>use </span><span style="color: #0000BB">autodie</span><span style="color: #007700">;<br><br></span><span style="color: #0000BB">my </span><span style="color: #007700">@list = <*>;<br>@list = </span><span style="color: #0000BB">glob</span><span style="color: #007700">(</span><span style="color: #DD0000">"*.psd"</span><span style="color: #007700">);</span><span style="color: #007700"><br><br></span><span style="color: #0000BB">open my $in</span><span style="color: #007700">, </span><span style="color: #DD0000">"<"</span><span style="color: #007700">, </span><span style="color: #DD0000">"nome_do_arquivo.txt"</span><span style="color: #007700">;<br><br>while (</span><span style="color: #0000BB">my $line </span><span style="color: #007700">= <</span><span style="color: #0000BB">$in</span><span style="color: #007700">>){<br>    </span><span style="color: #0000BB">$line </span><span style="color: #007700">= ~/(.+)</span><span style="color: #FF8000">#´(.+)/;<br>    </span><span style="color: #0000BB">my $s1 </span><span style="color: #007700">= $</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br>    </span><span style="color: #0000BB">my $s2 </span><span style="color: #007700">= $</span><span style="color: #0000BB">2</span><span style="color: #007700">;<br>    <br>    foreach </span><span style="color: #0000BB">my $i </span><span style="color: #007700">(@list){<br>        if (</span><span style="color: #0000BB">$i </span><span style="color: #007700">=~ /.*</span><span style="color: #0000BB">´$s2</span><span style="color: #007700">/){<br>            </span><span style="color: #0000BB">say </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$_</span><span style="color: #DD0000">: </span><span style="color: #0000BB">$s2</span><span style="color: #DD0000"> -> </span><span style="color: #0000BB">$s1</span><span style="color: #DD0000">\n"</span><span style="color: #007700">;<br>            </span><span style="color: #0000BB">rename $_</span><span style="color: #007700">, </span><span style="color: #0000BB">$s1</span><span style="color: #007700">;<br>        }<br>    }<br>}</span></span></code></code><br><br>Ou algo parecido.<br><br>O problema é que que o txt esta gb18030 (Chinês Tradicional) e o Perl trabalhando com o charset padrão os bytes são passados sem modificação nenhuma.<br>O sistema consegue converter o nome dos arquivos *.psd e o conteudo do txt para iso-8859-1. Dessa forma a leitura fica assim:<br><pre class="bbcode_code" style="height:36px;">501#°ËÀº»ÔÅ׾Ȱæ#</pre>Em contrapartida se convertido diretamente para utf8 ficaria:<br><pre class="bbcode_code" style="height:36px;">501#八篮辉抛救版#</pre>Mas eu creio que o Perl não esteja interpretando o texto original como gb18030 e sim como outro formato e tentando converter para utf8.<br><br>Portanto não da certo tentar renomear nem mesmo tentar ler o arquivo txt.<br><br>Alguem tem alguma sugestão de como resolver este problema???<br><br>Desde já grato.<br><br>Att,<br>Aureliano Guedes<br><br>                                     </div></body>
</html>