Ruby 1.8 e caso UTF-8 cordas declaração comparar

votos
1

Eu tenho uma tarefa Rake (em lib / tarefas diretório) 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 lido este cordas de arquivo txt UTF-8 externo?

PS Eu estou usando Ruby 1.8

PS Quero dizer comparar desta maneira:

result = case utf8string
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end
Publicado 09/12/2008 em 17:16
fonte usuário
Em outras línguas...                            


3 respostas

votos
2

Descobri que o 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 editor de texto adicione 3 bytes (BOM) no início para indicar que a codificação é UTF-8.

Q: O que é um BOM?

A: Uma marca de ordem de byte (BOM) consiste no código de carácter U + FEFF no início de um fluxo de dados, onde ele pode ser utilizado como uma assinatura que define a ordem de bytes e forma de codificação, principalmente dos ficheiros de texto simples não marcados. Sob alguns protocolos de nível mais elevado, a utilização de uma lista de materiais pode ser obrigatória (ou proibido) no fluxo de dados Unicode definido 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
Respondeu 10/12/2008 em 09:34
fonte usuário

votos
1

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

Respondeu 11/12/2008 em 10:57
fonte usuário

votos
0

Tente usar o mb_charsmétodo a partir do Rails ActiveSupport quadro:

result = case utf8string.mb_chars
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end
Respondeu 09/12/2008 em 22:18
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more