Mis Rails 3.2.2/1.9.3 de Ruby aplicación obtiene solicitudes de búsqueda, tales como:Determinar la codificación de caracteres en Ruby 1.9.3
http://booko.com.au/books/search?q=Fran%E7ois+Vergniolle+de+Chantal
Rubí/Carriles toma esta consulta y la decodifica - pero asume que es UTF 8. En algún momento me sale un:
invalid byte sequence in UTF-8
app/models/product.rb:694:in `upcase'
Creo que es hacer algo como esto:
q="Fran%E7ois+Vergniolle+de+Chantal"
=> "Fran%E7ois+Vergniolle+de+Chantal"
CGI.unescape(q)
=> "Fran\xE7ois Vergniolle de Chantal"
CGI.unescape(q).encoding.name
=> "UTF-8"
CGI.unescape(q).valid_encoding?
=> false
Cuál es la forma correcta de hacer frente a esto? Me gustaría transcodificarlo a la codificación correcta, pero ¿cómo determino la codificación actual? Lo que estoy haciendo actualmente, se acaba asumiendo que es LATIN1:
q.encode!("ISO-8859-1", "UTF-8", :invalid => :replace, :undef => :replace, :replace => "")
o hacer algo que encontré en un blog en alguna parte:
q = q.unpack('C*').pack('U*')
¿Cuál es la manera correcta de hacer frente a esto?
Editar El servidor está enviando correctamente "Content-Type: text html /; charset = UTF-8" de cabecera para el cliente. La página también contiene la metaetiqueta adecuada: 'meta http-equiv = "tipo de contenido" content = "text/html; charset = UTF-8"'
No estoy seguro si hay otro método para decirle al cliente qué codificaciones ¿usar?
¿Qué pasaría si escribes '#coording: UTF-8' en la parte superior de' app/models/product.rb'. Creo que debería resolver ese error. ¿Estará satisfecho con esta solución? – ck3g
@ ck3g, no, no se trata de la codificación de archivos aquí. – fl00r
Debería utilizar algún tipo de diccionario para determinar la codificación correcta, ya que el mismo byte '0xE7' podría ser (y de hecho es) un carácter válido en codificaciones distintas de Latin1. –