Pergunta

Eu tenho uma tarefa Rake (em lib / tarefas) que eu corro com cron no meu web de hospedagem compartilhada. O problema é que eu quero comparar uma string UTF-8 usando caso statment mas meu código fonte não é UTF-8 codificado. Se eu salvar código-fonte como UTF-8 houver erro quando tento iniciá-lo: (

O que eu tenho que fazer?

Pode ser ler este cordas de arquivo txt UTF-8 externo?

P.S. Eu estou usando Ruby 1.8

P.S. Quero dizer comparar desta maneira:

result = case utf8string
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end
Foi útil?

Solução

Eu diria que você precisa mudar o seu editor de texto como BOM é não necessária para UTF-8. UTF-8 não é dependente de ordem de byte. Consulte texto do link para mais detalhes.

Outras dicas

Eu descobri que meu problema não era em caso statment

O problema foi que quando eu salvar meu código fonte em formato UTF-8, o meu texto editor add 3 bytes (BOM) no início para indicar que a codificação é UTF-8.

Q:? O que é um BOM

A: A marca de ordem de byte (BOM) é constituído pelo código de caracteres L + FEFF no início de um fluxo de dados, onde ele pode ser usado como um assinatura que define a ordem de byte e que codifica forma, principalmente por não marcado arquivos de texto simples. Sob alguns protocolos de nível superior, o uso de uma lista de materiais pode ser obrigatório (ou proibido) nos dados de Unicode determinado fluxo em que protocolo.

UTF-8, UTF-16, UTF-32 & BOM

O erro que eu recebo foi:

1: Invalid char `\357' in expression
1: Invalid char `\273' in expression
1: Invalid char `\277' in expression

Tente usar o método mb_chars de ActiveSupport framework Rails:

result = case utf8string.mb_chars
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top