Migrando de ISO-8859-1 para UTF-8 no Rails

13 de Março de 2007

O Spesa foi criado usando a codificação ISO-8859-1, principalmente pelo fato de achar que o Ruby fazia UTF-8 "nas coxas". Como houve uma preocupação muito maior com o lançamento do Rails 1.2, através do mixin "Chars" — embora seja feito no framework e não na linguagem — e estou migrando meu projeto para esta nova versão, resolvi mudar a codificação de ISO para UTF-8.

Migrar o banco de dados foi bem simples, já que o PHPMyAdmin, quando exporta as informações, automaticamente converte para UTF-8. A única coisa que é preciso fazer, é importar os dados também pelo PHPMyAdmin (não consegui fazer direto pelo shell do MySQL).

Outra coisa que você tem que fazer é converter todos os arquivos — classes, templates e controllers — para UTF-8. Mas cuidado: não salve com o BOM. Se você salvar, o Ruby acusará erros de compilação.

Não se esqueça de atualizar seu código caso use funções que manuseiam strings. Veja um exemplo abaixo:

#retornará 15
puts 'João Silvério'.length
 
#retornará 13
puts 'João Silvério'.chars.length

Daqui para frente, vamos fazer nossos aplicativos com UTF-8. Capisce?

Posts relacionados
Definindo o fuso horário no Rails
Como migrar suas Stored Procedures no ambiente de teste

Comentários #

#1 Walter Cruz disse:
14 Mar 07, 02:05PM

Curioso. Hoje de manhã estava discutindo codificação de caracteres com um amigo meu.

Por enquanto, ainda vou de latin-1.

#2 Ricardo Momm disse:
15 Mar 07, 09:15AM

Bom saber que mais gente desenvolve websites em rails aqui no brasil hehe! O site spesa.com.br é muito bom, estou usando para testar.

[]´s

#3 Gerhard Bauer disse:
28 Abr 07, 10:13PM

Para o Ruby on Rails e MySQL trabalharem em UTF-8, adicionei a linha "encoding: utf8" (tudo junto, sem traço!) no arquivo database.yml na pasta do config, ficando assim:

development:
adapter: mysql
encoding: UTF8
database: world
username: root
password: xpto
host: localhost

Adicionalmente, como estou usando o RadRails, tive que setar no menu Window, Preferences, General, Content Types, Text, Properties, Preferences (outra vez!), então ADD para adicionar *.rhtml e colocar no Default Encoding UTF-8 e sair salvando.
Dessa forma, os programas .rhtml escritos no RadRails estarão codificados também em UTF-8 e a acentuação das mensagens sairá corretamente no html no browser! Veja meu exemplo de código que imprime a mensagem de erro com acentos corretamente:

-- Este código não existe na tabela!

Valeu, Nando, por sua dica que motivou um amador como eu a alterar a codificação da minha aplicação em Ruby on Rails de ISO-8859-1 para UTF-8!

#4 Helder disse:
16 Jun 07, 06:56AM

Olha…

Estou cheio de duvidas sobre o encoding. Meu Debian tem por default o UTF-8. O Banco de dados MySQL esta em latin1 (eu acho)…

Li em algum lugar que devo preferir o UTF-8. Será que devo colocar o uft-8 tambem no application.rb no metodo before_page ?

#5 Nando Vieira disse:
17 Jun 07, 12:49PM

Nota: Reproduzindo mensagem enviada por e-mail para o Helder

> Meu banco MYSQL esta em latin1. Será que devo converter para UTF-8.
Se você puder converter para UTF-8, um tanto quanto melhor. Caso contrário, você deve continuar definindo o content-type do jeito que já está fazendo.

> Outra pergunta como fazer para nao gravar o BOM que voce cita em seu blog ?
Isso depende do editor. No caso do Linux, o Gedit já faz isso automaticamente. No SciTe essa funcionalidade está em File > Encoding > UTF-8 Cookie.

Além disso, utilize as funções de UTF-8 do RoR é melhor porque você não terá problemas caso precise usar funções que lidem com a string. Por exemplo, use "maçã".chars.length em vez de "maçã".length.

#6 Renato Cardoso disse:
18 Jan 08, 09:55PM

Grande Fernando !

muito legal o texto!

#7 Igor Ferreira da Costa disse:
11 Mar 08, 03:31PM

Meus caros…

Descordo da idéia, pois estou desenvolvendo um aplicativo onde faço a geração de xml's e estou justamente com essa difículdade. Certo que ao visualiza o meu xml ele aparece perfeito com "ç´`…" com tudo que tem direito, mas em seu fonte ainda permanece o padrão UTF-8. Ai é que vem o problema, para efeito de calculos hash isso dá uma diferença muito grande.

#8 Comin Blog » Posts interessantes sobre RubyOnRails! disse:
16 Maio 09, 11:00PM

[...] No link abaixo o Nando Vieira fala sobre a codificação em arquivos, que sempre foram uma parte complicadade se implementar… http://simplesideias.com.br/migrando-de-iso-8859-1-para-utf-8-no-rails/ [...]

Deixe um comentário




Este blog usa o Gravatar.


Não é aceito código HTML: adicione-o no pastie.org ou paste.milk-it.net e poste apenas o link.

Se este é seu primeiro comentário, ele terá que ser aprovado antes de ser exibido.