0Pricing
Go Academy · Lección

Unicode y utf8

Gestione texto multibyte

Unicode y utf8 es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

Por qué importa Unicode

El texto moderno contiene acentos, emojis y alfabetos no latinos. Unicode asigna a cada carácter un número denominado punto de código.

Go almacena los strings como UTF-8, una codificación de ancho variable de esos puntos de código.

package main

import "fmt"

func main() {
    s := "héllo 世界"
    fmt.Println(s)
}

Los bytes por carácter varían

En UTF-8, un carácter ocupa de 1 a 4 bytes:

  • Letras ASCII: 1 byte.
  • Caracteres latinos acentuados: normalmente 2 bytes.
  • Caracteres CJK: normalmente 3 bytes.
package main

import "fmt"

func main() {
    fmt.Println(len("a"))
    fmt.Println(len("é"))
    fmt.Println(len("世"))
}

El paquete unicode/utf8

El paquete unicode/utf8 entiende la codificación. utf8.RuneCountInString(s) cuenta los caracteres correctamente, a diferencia de len.

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    s := "héllo"
    fmt.Println(len(s))
    fmt.Println(utf8.RuneCountInString(s))
}

Validar UTF-8

Use utf8.ValidString(s) para confirmar que una cadena contiene UTF-8 bien formado antes de procesarla.

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    fmt.Println(utf8.ValidString("héllo"))
    fmt.Println(utf8.ValidString(string([]byte{0xff, 0xfe})))
}

Decodificar una runa

utf8.DecodeRuneInString(s) devuelve la primera runa y cuántos bytes consumió. Esto permite recorrer una cadena manualmente.

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    r, size := utf8.DecodeRuneInString("世界")
    fmt.Println(string(r), size)
}

range decodifica automáticamente

Un bucle for range ya realiza la decodificación de UTF-8. El índice avanza según el tamaño en bytes de la runa en cada paso.

package main

import "fmt"

func main() {
    for i, r := range "a世b" {
        fmt.Println(i, string(r))
    }
}

El paquete unicode

El paquete unicode clasifica runas individuales. Funciones como unicode.IsLetter y unicode.IsDigit responden preguntas sobre un carácter.

package main

import (
    "fmt"
    "unicode"
)

func main() {
    fmt.Println(unicode.IsLetter('A'))
    fmt.Println(unicode.IsDigit('7'))
    fmt.Println(unicode.IsSpace(' '))
}

Cambiar mayúsculas y minúsculas por runa

unicode.ToUpper y unicode.ToLower funcionan con runas individuales, incluidas muchas letras que no son ASCII.

package main

import (
    "fmt"
    "unicode"
)

func main() {
    fmt.Println(string(unicode.ToUpper('a')))
    fmt.Println(string(unicode.ToLower('Z')))
}

Contar letras de forma segura

Combine los paquetes para contar únicamente las letras de un texto mixto, tratando correctamente cada runa.

package main

import (
    "fmt"
    "unicode"
)

func main() {
    count := 0
    for _, r := range "a1 b2 世!" {
        if unicode.IsLetter(r) {
            count++
        }
    }
    fmt.Println(count)
}

Invertir por runas

Para invertir texto de forma segura, debe invertir runas, no bytes; de lo contrario, los caracteres multibyte se separan.

package main

import "fmt"

func main() {
    runes := []rune("a世b")
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    fmt.Println(string(runes))
}

Integrarlo todo

Una herramienta de resumen rápida: informa de la longitud en bytes, el número de runas y si el texto es UTF-8 válido.

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    s := "Go 世界!"
    fmt.Println("bytes:", len(s))
    fmt.Println("runes:", utf8.RuneCountInString(s))
    fmt.Println("valid:", utf8.ValidString(s))
}

Comprobación rápida

Elija la forma correcta de contar caracteres.

Recapitulación: Unicode y utf8

Ahora puede trabajar con texto multibyte con confianza:

  • Las cadenas de Go usan UTF-8; los caracteres ocupan de 1 a 4 bytes.
  • unicode/utf8 cuenta, valida y decodifica runas.
  • unicode clasifica runas individuales y cambia sus mayúsculas y minúsculas.
package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    s := "café 語"
    fmt.Println(utf8.RuneCountInString(s), "runes")
}

Preguntas frecuentes

¿La lección «Unicode y utf8» es gratis?

Sí — el texto completo de «Unicode y utf8» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Unicode y utf8»?

Gestione texto multibyte Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Unicode y utf8»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Runas frente a bytes
  2. Funciones del paquete strings
  3. strings.Builder
  4. Unicode y utf8
← Volver a Go Academy