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
rangeprocessa 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.