2008-10-01 17 views
5

Tras el desarrollo de Ruby muy de cerca, aprendí que la codificación de caracteres detallada se implementa en Ruby 1.9. Mi pregunta por el momento es: ¿cómo se puede usar Ruby en este momento para hablar con una base de datos que almacena todos los datos en UTF8?¿Qué opciones existen ahora para implementar UTF8 en Ruby y RoR?

Antecedentes: Estoy involucrado en un nuevo proyecto donde Ruby/RoR es al menos una opción. Pero el proyecto debe basarse en un juego de caracteres internacionalizado (está distribuido en muchos países), preferiblemente UTF8.

Entonces, ¿cómo lidiar con eso? Gracias por adelantado.

Respuesta

0

Aunque no lo he probado, la biblioteca de caracteres-codificaciones (actualmente en alfa) agrega métodos a la clase String para manejar UTF-8 y otros. Su página en RubyForge es here. Está diseñado para Ruby 1.8.

Es mi experiencia, sin embargo, que si usa Ruby 1.8, si almacena datos en su base de datos como UTF-8, Ruby no se interpondrá mientras su codificación de caracteres en el encabezado HTTP sea UTF-8 . Es posible que no pueda operar en las cuerdas, pero no romperá nada. Ejemplo:

file.txt: 
¡Hola! ¿Como estás? Leí el artículo. ¡Fue muy excellente! 

Perdón mi pobre español; fue el mejor ejemplo de Unicode que pude encontrar.

in irb: 
str = File.read("file.txt") 
    => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\n" 
str += "Foo is equal to bar." 
    => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar." 
str = " " + str + " " 
    => " \302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar. " 
str.strip 
    => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar." 

Básicamente, solo tratará al UTF-8 como ASCII con caracteres impares en él. No ordenará de forma lexigráfica si los puntos de código están desordenados; sin embargo, clasificará por punto de código. Ejemplo:

"\302" <=> "\301" 
    => -1 

¿Cuánto planea operar con los datos en la aplicación Rails, de todos modos? La mayoría de los clasificadores, etc., generalmente los hace tu motor de base de datos.

+0

Lamento decirlo pero como se indicó en la pregunta, no estoy interesado en Ruby 1.9 o Ruby 2.0 atm. Una lectura/escritura en una base de datos podría estar bien, también, pero ¿qué pasa, digamos, ordenar estos datos después? – Georgi

+0

¿Haría la clasificación en la ayuda de consulta SQL? –

1

Ruby 1.8 funciona bien con cuerdas UTF-8 para operaciones básicas con las cuerdas. Dependiendo de la necesidad de su aplicación, algunas operaciones no funcionarán o no funcionarán como se espera.

Ej:

1) El tamaño de las cadenas le dará bytes, no caracteres desde el apoyo bytes mult no está allí todavía. ¿Pero necesitas saber el tamaño de tus cadenas en caracteres?

2) No dividir una cadena en un límite de caracteres. ¿Pero necesitas esto? Etc.

3) El orden de clasificación será funky si se clasifica en Ruby. La sugerencia de usar el DB para ordenar es una buena idea.

etc. comentario

Re del cartel sobre la ordenación de datos después de la lectura de db: Como se ha señalado, los resultados probablemente no coincide con las expectativas de los usuarios. Entonces la solución es ordenar el db. Y, por lo general, será más rápido, de todos modos, las bases de datos están diseñadas para ordenar los datos.

Resumen: Mi aplicación RoR 1.8.6 RoR funciona bien con caracteres Unicode internacionales procesados ​​y almacenados como UTF-8 en los navegadores modernos. Los idiomas de derecha a izquierda funcionan bien también. Problemas principales: asegúrese de que su base de datos y todas las páginas web estén configuradas para usar UTF-8. Si ya tiene algunos datos en su base de datos, tendrá que pasar por un proceso de conversión para cambiarlo a UTF-8.

Saludos,

Larry

1

"ahoy Unicode! Mientras rieles siempre ha sido capaz de almacenar y Unicode pantalla con ninguna carne de vaca, que ha sido un poco más complicado para truncar, revertir o lleve a la longitud exacta de una cadena UTF-8. Necesitaba engañar con KCODE y aunque mucha gente lo hizo funcionar, no fue tan fácil de conectar como podría haber esperado (o incluso esperado).

Entonces, como Ruby no será consciente de los multibytos hasta este momento el próximo año, Rails 1.2 presenta ActiveSupport :: Multibyte para trabajar con ingenio h Cadenas de Unicode. Llame al método Chars en su cadena para comenzar a trabajar con caracteres en lugar de bytes. "Click Here for more

Cuestiones relacionadas