Sobes.tech
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 range procesa 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.