Pregunta

¿Cómo convertir una cadena que está en UCS2 (2 bytes por carácter) en una cadena UTF8 en Ruby?

¿Fue útil?

Solución

Debería consultar iconv , que es parte de la biblioteca estándar de Ruby. Está diseñado para esta tarea.

Específicamente,

 Iconv.iconv("utf-8", "utf-16", str).first

debería manejar la conversión.

Otros consejos

Debido a que los caracteres en la mayoría de los casos, la cadena en la codificación UCS2 se puede representar como una cadena UTF-16 (en caracteres UTF-16 con códigos mayores que 0x10000 rara vez se usa), creo que el uso de Iconv es una mejor manera de convertir cadenas. Código de muestra:

require 'iconv'

ic = Iconv.new 'UTF-8', 'UTF-16'
utf8string = ic.iconv ucs2string

Con Ruby 1.9:

string.encode("utf-8")

Si no se conoce la codificación de la cadena, es posible que deba configurarla primero:

string.force_encoding("utf-16be").encode("utf-8") # Big-endian
string.force_encoding("utf-16le").encode("utf-8") # Little-endian
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top