Pregunta

Tengo una tarea Rake (en el directorio lib / task) que ejecuto con cron en mi alojamiento web compartido. El problema es que quiero comparar una cadena UTF-8 usando el enunciado del caso, pero mi código fuente no está codificado en UTF-8. Si guardo el código fuente como UTF-8, hay un error cuando intento iniciarlo :(

¿Qué tengo que hacer?

¿Se pueden leer estas cadenas del archivo txt externo UTF-8?

P.S. Estoy usando Ruby 1.8

P.S. Me refiero a comparar de esta manera:

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

Solución

Yo diría que necesita cambiar su editor de texto ya que BOM no es necesario para UTF-8. UTF-8 no depende del orden de bytes. Consulte texto del enlace para obtener más información.

Otros consejos

Descubrí que mi problema no estaba en el enunciado del caso

El problema era que cuando guardaba mi código fuente en formato UTF-8, mi editor de texto agrega 3 bytes (BOM) al principio para indicar que la codificación es UTF-8.

  

P: ¿Qué es una BOM?

     

A: Una marca de orden de bytes (BOM) consiste en el código de caracteres   U + FEFF al comienzo de una secuencia de datos, donde se puede usar como   firma que define el orden de bytes y la forma de codificación, principalmente de sin marcar   archivos de texto sin formato. Bajo algunos protocolos de nivel superior, el uso de una lista de materiales puede ser   obligatorio (o prohibido) en la secuencia de datos Unicode definida en ese protocolo.

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

El error que recibí fue:

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

Intente usar el método mb_chars de Rails ' ActiveSupport marco:

result = case utf8string.mb_chars
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top