strconv.Quote în Go

Conversii între text și numere (strconv) Go 1.0 (QuoteToGraphic din Go 1.6)

Pune textul între ghilimele, ca în codul Go, și scrie caracterele speciale ca secvențe \n, \t, \u…

Sintaxă
func Quote(s string) string
func QuoteToASCII(s string) string
func QuoteToGraphic(s string) string

Ce face strconv.Quote

strconv.Quote(s) returnează textul între ghilimele duble, scris exact cum l-ai scrie în codul Go: rândul nou devine \n, tab-ul \t, ghilimelele \", iar caracterele invizibile sau invalide devin coduri \x.. sau \u..... Literele cu diacritice rămân neschimbate. Este ce face și verbul %q din fmt.

QuoteToASCII transformă în cod și toate caracterele care nu sunt ASCII: „Iași” devine "Ia\u0219i". Util când rezultatul ajunge într-un sistem care acceptă doar ASCII.

QuoteToGraphic lasă neschimbate toate caracterele „grafice” din Unicode, inclusiv spațiile speciale (spațiul neîntrerupt, U+00A0), pe care Quote le transformă în cod.

Parametri

Parametru Descriere
s Textul de pus între ghilimele.

Ce returnează

Textul între ghilimele, cu secvențe de evitare (escape).

Exemple

Exemplul 1: Caractere speciale făcute vizibile

package main

import (
	"fmt"
	"strconv"
)

func main() {
	s := "Ana a spus: \"Bună!\"\n\tIași"
	fmt.Println(strconv.Quote(s))
	fmt.Println(strconv.QuoteToASCII(s))
	fmt.Printf("%q\n", s)
}

Rezultat

"Ana a spus: \"Bună!\"\n\tIași"
"Ana a spus: \"Bun\u0103!\"\n\tIa\u0219i"
"Ana a spus: \"Bună!\"\n\tIași"

Exemplul 2: Quote față de QuoteToGraphic

Textul conține un spațiu neîntrerupt (U+00A0) între 10 și lei. Quote îl scrie ca cod, QuoteToGraphic îl lasă așa cum este.

package main

import (
	"fmt"
	"strconv"
)

func main() {
	pret := "10\u00a0lei"
	fmt.Println(strconv.Quote(pret))
	fmt.Println(strconv.QuoteToGraphic(pret))
	fmt.Println(strconv.QuoteToASCII("Țară"))
}

Rezultat

"10\u00a0lei"
"10 lei"
"\u021aar\u0103"

Greșeli frecvente

  • Folosești Quote ca să pregătești text pentru JSON, SQL sau HTML. Regulile acelor formate sunt diferite; folosește encoding/json, parametri SQL, respectiv html/template.

Comenzi înrudite

  • strconv.QuoteRune: Scrie un caracter (rune) între apostrofuri, ca în codul Go: ‘ș’, ‘\n’, ‘\u0219’.
  • strconv.Unquote: Unquote scoate ghilimelele și interpretează secvențele \n, \u…; UnquoteChar decodează un caracter; QuotedPrefix găsește textul citat de la început.
  • strconv.AppendQuote: Variantele Append ale funcțiilor Quote și QuoteRune: adaugă textul sau caracterul între ghilimele la un []byte.
  • strconv.IsPrint: IsPrint și IsGraphic spun dacă un caracter poate fi afișat ca atare; CanBackquote dacă un text încape între backticks.
  • fmt.Printf: Afișează text formatat cu %d, %s, %.2f etc.; Sprintf returnează textul, Fprintf îl scrie într-un fișier sau alt Writer.