Sobes.tech
Junior

Como ler uma linha que contém hieróglifos, cirílicos e outros símbolos?

sobes.tech IA

Resposta da IA

No Golang, as strings são representadas por padrão em UTF-8, o que permite trabalhar facilmente com caracteres de diferentes alfabetos, incluindo hieróglifos e cirílico. Para ler essas strings, basta usar funções e pacotes padrão.

Leitura de um arquivo:

import (
	"bufio"
	"fmt"
	"os"
)

func readStringFromFile(filename string) error {
	file, err := os.Open(filename)
	if err != nil {
		return fmt.Errorf("erro ao abrir o arquivo: %w", err)
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		line := scanner.Text() // A linha já está em UTF-8
		fmt.Println(line)
	}

	if err := scanner.Err(); err != nil {
		return fmt.Errorf("erro ao escanear o arquivo: %w", err)
	}
	return nil
}

Leitura da entrada padrão:

import (
	"bufio"
	"fmt"
	"os"
)

func readStringFromStdin() {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("Digite uma string: ")
	line, _ := reader.ReadString('\n') // A string é lida em um slice de bytes e depois convertida para string (UTF-8)
	fmt.Println("Você digitou:", line)
}

Iterando sobre os caracteres (runes):

import "fmt"

func iterateString(s string) {
	for i, r := range s { // Range itera sobre as runas (pontos de código Unicode)
		fmt.Printf("Posição: %d, Runa: %c, Código Unicode: %U\n", i, r, r)
	}
}

Pontos principais:

  • Strings em Golang são sequências imutáveis de bytes.
  • Por padrão, a codificação usada é UTF-8. Isso garante uma representação correta de caracteres de diferentes idiomas.
  • A iteração sobre uma string usando range processa cada rune (ponto de código Unicode), não cada byte.

Adicionalmente:

Se os dados de origem não estiverem em UTF-8, pode ser necessário converter a codificação usando pacotes da biblioteca padrão ou bibliotecas externas, como golang.org/x/text/encoding.