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…