2016-04-01 15 views
3

Ich baue ein kleines Werkzeug, das die Eingaben eines Benutzers analysiert und häufige Fehler beim Schreiben findet und sie kennzeichnet, damit der Benutzer seinen Text verbessern kann. Bis jetzt funktioniert alles gut, außer für Text, der kurvige Anführungszeichen im Vergleich zu normalen ASCII-Anführungszeichen hat. Ich habe einen Hack jetzt die wie so eine Zeichenfolge Ersatz für das Öffnen (und Schließen) einzelne typografische Anführungszeichen und doppelte Öffnung (und schließen) typografische Anführungszeichen tun:Normalisierung der Texteingabe in ASCII in Golang

cleanedData := bytes.Replace([]byte(data), []byte("’"), []byte("'"), -1)

Ich mag es fühlen muss einen besseren Weg geben Um dies in der stdlib zu behandeln, kann ich auch andere nicht-ASCII-Zeichen in ein Ascii-Äquivalent umwandeln. Jede Hilfe würde sehr geschätzt werden.

Antwort

4

Die strings.Map Funktion sieht für mich aus, wie Sie wollen.

Ich weiß nicht, eine generische 'ToAscii' -Funktion, aber Map hat einen schönen Ansatz für die Zuordnung von Runen zu anderen Runen.

Example (updated):

func main() { 
    data := "Hello “Frank” or ‹François› as you like to be ‘called’" 
    fmt.Printf("Original: %s\n", data) 
    cleanedData := strings.Map(normalize, data) 
    fmt.Printf("Cleaned: %s\n", cleanedData) 
} 

func normalize(in rune) rune { 
    switch in { 
    case '“', '‹', '”', '›': 
     return '"' 
    case '‘', '’': 
     return '\'' 
    } 
    return in 
} 

Ausgang:

Original: Hello “Frank” or ‹François› as you like to be ‘called’ 
Cleaned: Hello "Frank" or "François" as you like to be 'called' 
+0

Vielen Dank dafür, ich hatte nicht vor in der Dokumentation zu sehen. Es macht Sinn, die Normalisierung in einer Funktion wie dieser zu behandeln. – dansackett