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/utf8cuenta, valida y decodifica runas.unicodeclasifica 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.