2011-08-07 12 views
17

Tengo estos valores de una base de datos Unicode pero no estoy seguro de cómo traducirlos a la forma legible para humanos. ¿Cómo se llaman estos?Convertir un punto de código unicode en un carácter de cadena en Ruby

Aquí están:

  • U+2B71F
  • U+2A52D
  • U+2A68F
  • U+2A690
  • U+2B72F
  • U+2B4F7
  • U+2B72B

¿Cómo puedo convertir estos símbolos allí legibles?

+0

@Gabriel no tengo idea de lo que está intentando decir sobre UCS-2? No es un "Símbolo de codificación". Es un esquema de serialización obsoleto que ya no funciona en Unicode, y no lo ha hecho desde Unicode 1.1, que es infinitamente hace mucho tiempo. – tchrist

Respuesta

34

¿Qué tal:

puts ["2B71F".hex].pack("U") 

Editar

En Ruby 1.9 incluso se puede hacer esto:

puts "\u{2B71F}" 

es decir, la secuencia de escape \u{} se puede usar para descodificar puntos de código Unicode.

+0

Wow, muchas gracias. – s84

+3

También podría usar un literal hexadecimal: '[0x2B71F] .pack 'U''. –

19

Los símbolos Unicode como U+2B71F se conocen como codepoint.

El sistema Unicode define un único codepoint para cada personaje en una multitud de idiomas del mundo, símbolos científicos, monedas, etc. Este juego de caracteres está creciendo constantemente.

Por ejemplo, U+221E es infinito.

El codepoints son números hexadecimales. Siempre hay exactamente un número definido por personaje.

Hay muchas maneras de organizar esto en la memoria. Esto se conoce como encoding cuyos comunes son UTF-8 y UTF-16. La conversión de ida y vuelta está bien definida.

Aquí lo más probable es que esté buscando la conversión de unicode codepoint en UTF-8 caracteres.

codepoint = "U+2B71F" 

Hay que extraer la parte hexagonal viene después U+ y obtener sólo 2B71F. Esta será la primera captura grupal. See this.

codepoint.to_s =~ /U\+([0-9a-fA-F]{4,5}|10[0-9a-fA-F]{4})$/ 

Y estás caracteres UTF-8 será:

utf_8_character = [$1.hex].pack("U") 

Referencias:

  1. Convert Unicode codepoints to UTF-8 characters with Module#const_missing.
  2. Tim Bray on the goodness of unicode.
  3. Joel Spolsky - The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!).
  4. Dissecting the Unicode regular expression
+0

'$ 1' ¿qué es? ¿Dónde estás usando 'codepoint'? – s84

+0

'codepoint' era" U + 2B71F ". Para extraer solo "2B71F" de él, lo comparo con una expresión regular Unicode. Hay un grupo definido en la expresión regular para extraer "2B71F". Después del partido, si hay uno, puede consultarlo con $ 1 en este caso. [Siga este enlace permanente rubular para ver la expresión regular en acción.] (Http://rubular.com/r/fXocVSS7ZS) –

+2

Una de las mejores respuestas con respecto a unicode, puntos de código utf-8, juegos de caracteres, codificación, etc. que alguna vez leí en SO ... y los enlaces son geniales. http://www.joelonsoftware.com/articles/Unicode.html es particularmente acertado. – AJP

Cuestiones relacionadas