Junior
¿Cómo leer una línea que contiene caracteres jeroglíficos, cirílicos y otros símbolos?
sobes.tech AI
Respuesta de la IA
En Golang, las cadenas se representan por defecto en UTF-8, lo que permite trabajar sin problemas con caracteres de diferentes alfabetos, incluyendo jeroglíficos y cirílico. Para leer estas cadenas, basta con usar funciones y paquetes estándar.
Lectura desde un archivo:
import (
"bufio"
"fmt"
"os"
)
func readStringFromFile(filename string) error {
file, err := os.Open(filename)
if err != nil {
return fmt.Errorf("error al abrir el archivo: %w", err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text() // La línea ya está en UTF-8
fmt.Println(line)
}
if err := scanner.Err(); err != nil {
return fmt.Errorf("error al escanear el archivo: %w", err)
}
return nil
}
Lectura desde la entrada estándar:
import (
"bufio"
"fmt"
"os"
)
func readStringFromStdin() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Ingrese una cadena: ")
line, _ := reader.ReadString('\n') // La cadena se lee en un slice de bytes y luego se convierte en string (UTF-8)
fmt.Println("Usted ingresó:", line)
}
Iteración sobre los caracteres (runas):
import "fmt"
func iterateString(s string) {
for i, r := range s { // Range itera sobre las runas (puntos de código Unicode)
fmt.Printf("Posición: %d, Runa: %c, Punto de código: %U\n", i, r, r)
}
}
Puntos clave:
- Las cadenas en Golang son secuencias inmutables de bytes.
- Por defecto, se usa la codificación UTF-8. Esto garantiza una representación correcta de los caracteres de diferentes idiomas.
- La iteración sobre una cadena con
rangeprocesa cada runa (punto de código Unicode), no cada byte.
Adicionalmente:
Si los datos originales no están en UTF-8, puede ser necesario convertir la codificación usando paquetes de la biblioteca estándar o bibliotecas externas, como golang.org/x/text/encoding.