¿Cómo convierto una cadena UCS2 en UTF8?
Pregunta
¿Cómo convertir una cadena que está en UCS2 (2 bytes por carácter) en una cadena UTF8 en Ruby?
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