ASCII? Unicode? ISO-8859-1? XYZ-6996? BINGO!!
Se você está perdido no meio de tanto padrão de codificação de caracteres e não sabe o que fazer no meio disso tudo, então você veio ao tópico certo!! Leia o artigo do Joel Spolsky sobre char-encoding em http://www.joelonsoftware.com/articles/Unicode.html e seja uma pessoa mais feliz e saudável.
Tudo o que você precisa saber sobre character encoding!
41 Respostas
Argh! Joel Spolsky!!
Ja tive muitos problemas com isso utilizando tecnologia WebSpeed do Progress, com Java por enquanto ainda nao tive problema mesmo porque ainda nao fiz nada muito grande com Java.
Eu também pensava que isso era besteira, coisa simples.
Realmente é quando voce trabalha apenas com 1 única plataforma e 1 único encoding em todas pontas do seu sistema, então tudo automagicamente funciona!
Porém agora trabalhamos com 2.5 plaformas (.5 devido a mesma estar em 2 pontos devida e indevidamente configurada) e encodings diferentes em várias pontas do sistema. Ou seja, de repente passamos da sorte para uns 4-5 encodings diferentes! Olha que acredito que essa situação poderia piorar ainda mais…
Resolvi, ate onde a burrice me permitiu (alheia lógico), utilizando UTF-8 ou informando quando era outro ostensivamente de ponta a ponta , ou seja, onde tinha texto envolvido, explicitamente informavamos o enconding, utilizando UTF-8 sempre que possivel. Os lugares mais comuns são: DBs (mysql é meio burrinho com isso), arquivos textos (xml, fontes java, etc), streams de texto (http principalmente).
Depois de lutar bastante com isso, acredito que finalmente entendi direito oque e porque de encondings, o artigo do Joe ajudou muito.
Finalmente, cheguei a conclusão que esse é mais um daqueles assuntos que ou a pessoa entende ou entende completamente errado.
Verdade… eu tinha entendido completamente errado…
eu achava que o encoding de uma string já vinha embutido nela…
E eu tb achava que UTF era um só, e que a coisa funcionava meio Huffmann, com a árvore expandindo conforme necessário usando os bits de cima…
Aliás, meio burro mesmo mexer com UFT-32 pra escrever em inglês, um baita desperdício… acho que o futuro é aprender direito mesmo a usar encodings e fazer a aplicação independente deles (independente no sentido de que ela usa encodings o tempo todo, então pra ela qq um serve).
Esse artigo me deixou bravo com UTF-8, eu achando que tava usando algo moderno, e é um encoding tão (in)útil quando iso-8859-1…
A melhor frase é “não existe plain text”… : ))
[]s!
Muito bom … mostrei pra um pessoal que programa a mais de 10 anos hehe … foi legal ver as sobrancelhas subindo e decendo enquanto liam 
Estou tendo problemas em uma aplicacao web desenvolvida no windows pro linux.
A onde eu coloco acentuacao.
No windows funciona tranquilo, quando jogo o deploy no Linux, comecam os problemas.
Por exemplo se eu vou cadastrar um usuario.
Coloco nome = usuário e ele transforma em usu?rio.
E é assim com todos os acentos.
Já tentei colocar UTF-8, ISO-8859-1 nas jsp, mas nada faz funcionar.
O Linux é um CentOS 4 .
O Tomcat é o Tomcat 5.0.28.
Configure o encoding da tua JVM/distro linux
Como posso fazer isso?
SilvioNetto: Clique Aqui!
gui. 
ja usei o -Dfile-encode
ja tentei mudar no javac -encode
:arrow: http://www.guj.com.br/posts/list/0/11166.java#139925
gui. 
SilvioNetto: Clique Aqui!gui.
Não sabe, não responde.
Utilizando a dica que eu passei,
já encontrei a resposta… 
E você ainda está com o problema? :mrgreen:
Miss Simpatia… :twisted:
gui. 
Utilizando a dica que eu passei,
já encontrei a resposta…![]()
E você ainda está com o problema? :mrgreen:
Miss Simpatia… :twisted:gui.
Falar q encontrou é facil …quero ver provar…
ok, vou morder a isca, mas que fique claro,
consultoria: 150R$ a hora pra aprender a usar o Google. :mrgreen:
[size=32][color=red]vi /etc/sysconfig/i18n[/color][/size]
isso ai eu já fiz…não funcionou …
e tbm ja tentei colocar charset nas paginas jsp e nos arquivos xml …
tambem nao funcionou…
consegui em uma aplicacao simples hoje, criando um filtro no tomcat pois a aplicacao é J2EE com Hibernate, Struts feita no Jdev e rodando no Tomcat 5.0.30 e Sistema Operacional CentOS 4.
Criando uma classe q converte o charset e declarando como filtro no Tomcat…
Convertendo o charset para o padrao atual dos Sistemas Operacional Linux o charset: UTF-8
O fonte separece com o abaixo:
e foi achado no link:
http://www-106.ibm.com/developerworks/java/library/j-tomcat/?open&l=101,t=grj,p=TomcatTricks
A intencao é adaptar a aplicacao ao sistema operacional e nao o sistema operacional a aplicacao…
Set Character Encoding
filters.SetCharacterEncodingFilter
encoding
UTF-8
Via de regras problemas com encoding são frustrantes, dão um senhor trabalho para resolver e as variaveis do seu ambiente são mais significativas que a ajuda que podemos dar aqui. Então manerem pessoal, por que se fosse facil não seria tão doloroso resolver.
Variavel de ambiente não é pois a mesma aplicacao rodando no OC4J funciona, quando passo pro Tomcat nao funciona.
Pessoal humildemente vou pedir a colaboração de vocês para entender melhor esse negócio de encodings.
Dei uma lida rápida e gostaria de tirar algumas dúvidas.
- Os microcomputadores atuais se baseam na tabela ASCII certo ?
- Existem variações dessa tabela para diferentes Locais. Ex: na china o código 10 pode ser um caracter na rússia outro. Isso seria o encoding ?
- O unicode seria um esforço para padronizar os códigos ?
Sempre foi meio obscuro para mim…
jprogrammer, leia o artigo do spolsky que eu ja linkei 5 bilhoes de vezes aqui no guj. 
Esse artigo está ensinado o que é.
Mas nao esplica como resolver o problema.
Uma vez q no windows os arquivos de textos sao escritos como ISO-8859-1.
E no Linux o padrão é UTF-8.
Já mudei o cabeçario de todas jsp para UTF-8.
Já mudei os arquivos xml pra UTF-8.
No OC4J roda de boa. Quando jogo o deploy no Tomcat é que dá problema.
Com o filtro q eu passei, resolveu o problema no OC4J.
Mas no Tomcat não starta a aplicacao.
Dá uma falha no uri * do web.xml
Ai passei ele pra *.do .
Ai startou a aplicacao, mas ai nao funciona o filtro.
/**
* Convert ISO8859-1 format string (which is the default sent by IE
* to the UTF-8 format that the database is in.
*/
public String toUTF8(String isoString)
{
String utf8String = null;
if (null != isoString && !isoString.equals(""))
{
try
{
byte[] stringBytesISO = isoString.getBytes("ISO-8859-1");
utf8String = new String(stringBytesISO, "UTF-8");
}
catch(UnsupportedEncodingException e)
{
// As we can't translate just send back the best guess.
System.out.println("UnsupportedEncodingException is: " + e.getMessage());
utf8String = isoString;
}
}
else
{
utf8String = isoString;
}
return utf8String;
}
[color=red]Mensagem do moderador: ao postar codigos utilize as tags [ code ] [ /code ].[/color]
Achei esse fonte aqui na net.
Pode ajudar alguns.
Pra mim nao serviu pois eu teria q mudar toda a aplicação.
Cuidado windows não usa iso-8859-1!! Ele usa codepage 1352 (esse o número?), que possui diferenças em alguns caractéres como símbolo do euro.
Correção: o Windows usa “Windows-1252”.
Os arquivos q eu estou recebendo do windows estao variando, alguns chegam como UTF-8 e outros como ISO-8859-1.
Percebi que a os arquivos criados com WindowsXP em Portugues apresentaram esse problema, já os criados no Windows XP em Ingles não.
Tive q converter tudo no Linux pra UTF-8.
Uma aplicação rodando beleza no Windows copiada para o Linux apresentou 39 erros.
Convertendo os arquivos um a um no Linux consegui rodar a aplicação.
E a acentuação o que resolveu foi fazer um filtro no web.xml com uma classe convertendo o request.setCharacterEncoding(“latin1”);
A título de curiosidade: http://www.w3.org/International/O-charset-list.html
E apenas como desabafo, ou coisinha chata. ¬¬
…puts eu mudei( pra UTF-8, depois pra ISO-8859-1 e pra ISO-8859-2) os arquivos xml, os jsp, até o module_tracking do net beans, e nada!! eu tentei colocar UTF-16 nas qdo vou salvar o web.xml ele fala que não suporta essa versão… e eu continuo com esse problema com os caracteres…vc sabe como posso resolver isso??? vlw pela atenção cara!!!
Aproveitando este tópico… Haveria algum conversor que passasse de UTF-8 para ISO8859-1?
Sim, iconv.
bom, mas como eu faria para executar em batch?
Vai atras e pesquise sobre o assunto!! Você se quer viu que raios é o iconv? É um programa que faz isso em linha de comando - batch.
Sim, eu vi o que é o iconv. Quando eu disse batch, eu não me referia à linha de comando, mas sim à capacidade de converter todos os arquivos de um diretório recursivamente, por exemplo. Acho que não me expressei muito bem.
não seria o 850?
O fato de o vi interpretar os “enter” de alguns arquivos d bloco d notas do windows (.txt) como “^M” tem a ver com encoding tb?
Nao, isso eh o formato de arquivos texto diferente entre Unix, Windows e Macs.
/** * Convert ISO8859-1 format string (which is the default sent by IE * to the UTF-8 format that the database is in. */ public String toUTF8(String isoString) { String utf8String = null; if (null != isoString && !isoString.equals("")) { try { byte[] stringBytesISO = isoString.getBytes("ISO-8859-1"); utf8String = new String(stringBytesISO, "UTF-8"); } catch(UnsupportedEncodingException e) { // As we can't translate just send back the best guess. System.out.println("UnsupportedEncodingException is: " + e.getMessage()); utf8String = isoString; } } else { utf8String = isoString; } return utf8String; }[color=red]Mensagem do moderador: ao postar codigos utilize as tags [ code ] [ /code ].[/color]
Porra... tentei 325mil soluções p/ resolver um problema aqui de recebimento de texto de html form... nada funcionava.
Essa funfou de 1a!!! E a funçãozinha protinha já. Só colocar na classe e usar. Valeu mesmo!
[]'s,
Leo.
o fato de em JTextField … o uso da vírgula do teclado numerico ( a virgula do teclado normal aparece OK ) exibir um quadrado nos textFields ao utilizar o linux ( embora no proprio linux (debian)- terminal ou outros programas ela seja exibida normal ), tem haver com configuração de encoding da JVM ?
Ah! no windows aparece normal ! ( porque o sistema roda com cliente win ou linux )
Isso também acontece no próprio netbeans ! 

pessoal… sou noob…
e não sei resolver esse problema da vírgula.
Tenho que resolver sem alterar o código…
alguem me ajuda, por favor?
vlw!
Booooum…
Ressussitando…
Eu tou com um problema que, está mais pra ser problema de OS do que de servidor…
Eu tenho um CentOS que tem CPanel, apache, tomcat e firebird…
Eu conserto tudo… dudo bomba…
dai, num belo instante… tuuudo mela…
Reiniciar o apache não adianta, reiniciar o tomcat não adianta, reiniciar o firebird… não adianta também…
Reiniciar o servidor sim…
Alternativas que já usei:
*Incluir filtro
*Incluir encod aceitos no /etc/profile
*Incluir UTF-8 nos cabeçalhos
e…
A intermitência continua…
Alguem tem alguma boa dica?
Booooum…
Ressussitando…Eu tou com um problema que, está mais pra ser problema de OS do que de servidor…
Eu tenho um CentOS que tem CPanel, apache, tomcat e firebird…
Eu conserto tudo… dudo bomba…
dai, num belo instante… tuuudo mela…Reiniciar o apache não adianta, reiniciar o tomcat não adianta, reiniciar o firebird… não adianta também…
Reiniciar o servidor sim…Alternativas que já usei:
*Incluir filtro
*Incluir encod aceitos no /etc/profile
*Incluir UTF-8 nos cabeçalhose…
A intermitência continua…
Alguem tem alguma boa dica?
Faltou apenas um pequeno detalhe: você explicar qual é o seu problema.
Será que não seria melhor criar um tópico novo?
Sobre esse assunto,
esse post está bem mais completo:
http://www.guj.com.br/posts/list/12456.java
fw
Pois eh…
O problema é justamente o problema do tópico…
Charset que hora funciona… ora não…
Eu reinicio o servidor e fica tudo bom…
ç é ç…
horas depois sem nenhum motivo aparente
ç vira ? pra novos registros e e registros que estão no DB viram ◘…
E isso pra tooodo o restante dos caracteres especiais…
O OS é um CENTOS Enterprise 5 i686…
O Tomcat é o 5.5, o Apache é o 1.3…
E, as soluções propostas ali que não implicavam em modificação dos meus fontes… eu já fiz…
Modificação de cabeçalho, de accept no form, filtro no web.xml, mudar o lang do OS e etc, etc…
:),
Agora tá mais explicadinho…
Alguma dica?