strings.ToValidUTF8 în Go

Înlocuiește octeții care nu formează UTF-8 valid cu un text la alegere (de exemplu „?” sau „�”).

Sintaxă
func ToValidUTF8(s, replacement string) string

Ce face strings.ToValidUTF8

Un string în Go poate conține orice octeți, nu doar UTF-8 valid. Datele citite din fișiere vechi (de exemplu salvate în codarea Windows-1250) sau tăiate greșit la mijlocul unei litere pot conține octeți invalizi, care apar pe ecran ca semne ciudate.

strings.ToValidUTF8(s, replacement) returnează o copie în care fiecare secvență de octeți invalizi este înlocuită cu replacement (poate fi gol, pentru ștergere). Ca să verifici doar dacă un text este valid, folosește utf8.ValidString.

Parametri

Parametru Descriere
s Textul verificat.
replacement Textul pus în locul octeților invalizi.

Ce returnează

Un text UTF-8 valid.

Exemple

Exemplul 1: Text tăiat la mijlocul unei litere

„ș” ocupă 2 octeți. Tăind după 3 octeți din „Iași”, păstrăm doar primul octet al lui ș, care singur nu este UTF-8 valid.

package main

import (
	"fmt"
	"strings"
	"unicode/utf8"
)

func main() {
	taiat := "Iași"[:3]
	fmt.Printf("%q valid: %t\n", taiat, utf8.ValidString(taiat))
	fmt.Println(strings.ToValidUTF8(taiat, "?"))
	fmt.Println(strings.ToValidUTF8(taiat, ""))

	vechi := "Bra\xbaov" // litera s cu sedilă în codarea Windows-1250
	fmt.Println(strings.ToValidUTF8(vechi, "\uFFFD"))
}

Rezultat

"Ia\xc8" valid: false
Ia?
Ia
Bra�ov

Greșeli frecvente

  • Crezi că ToValidUTF8 repară textul și reface litera originală. Doar înlocuiește octeții invalizi; pentru conversia din Windows-1250 ai nevoie de pachetul golang.org/x/text/encoding/charmap.

Comenzi înrudite

  • unicode/utf8.ValidString: Verifică dacă un text sau un []byte este UTF-8 valid și dacă o valoare rune este un caracter Unicode valid.
  • unicode/utf8.RuneCountInString: Numără caracterele (rune) dintr-un text UTF-8; len() numără octeții, iar ă, î, ș, ț ocupă câte 2 octeți.
  • strconv.Quote: Pune textul între ghilimele, ca în codul Go, și scrie caracterele speciale ca secvențe \n, \t, \u…