Sono nuovo per andare e sto cercando di implementare una funzione per convertire i caratteri accentati nel loro equivalente non accentato. Sto tentando di seguire l'esempio dato nel blog this (vedi l'intestazione "Performing magic").Vai: Rimozione degli accenti dalle stringhe
Quello che ho cercato di raccogliere da questo è:
package main
import (
"fmt"
"unicode"
"bytes"
"code.google.com/p/go.text/transform"
"code.google.com/p/go.text/unicode/norm"
)
func isMn (r rune) bool {
return unicode.Is(unicode.Mn, r) // Mn: nonspacing marks
}
func main() {
r := bytes.NewBufferString("Your Śtring")
t := transform.Chain(norm.NFD, transform.RemoveFunc(isMn), norm.NFC)
r = transform.NewReader(r, t)
fmt.Println(r)
}
Non funziona minimamente e io onestamente non so che cosa significa in ogni caso. Qualche idea?
Nota, sebbene 'transform.NewReader' (o' transform.NewWriter') siano preferiti se esiste un modo per "trasmettere" i dati (ad esempio per trasformare i dati durante la lettura/scrittura da/verso un file o la rete) , se vuoi solo gestire un '[] byte' o' string' esistente, il pacchetto di trasformazione fornisce anche '' transform.Bytes'] (https://godoc.org/golang.org/x/text/transform/# Bytes) e ['transform.String'] (https://godoc.org/golang.org/x/text/transform/#String). –
Chiamare direttamente il metodo di trasformazione come questo non è una buona idea! –
Il motivo per cui ottieni meno byte di quanto ti aspetti è che non stai leggendo tutto dal lettore. La "correzione" più semplice al codice esistente è quella di sostituire la chiamata di lettura con 'io.ReadFull (r, b)', ma ciò fa ancora supposizioni sulla lunghezza finale, ci sono modi migliori per farlo. –