2016-04-01 6 views
3

私はユーザーの入力を解析し、一般的な落とし穴を書いて見つけ出し、ユーザーがテキストを改善できるようにフラグを立てる小さなツールを構築しています。これまでのところ、通常のASCIIストレートの引用符と比較して中括弧を持つテキストを除いて、すべてがうまく機能します。より良い方法がなければならないように私は感じGolangのテキスト入力を正規化する

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

:私はそうのような開口部(およびクローズ)単一カーリー引用符と二重の開口部(およびクローズ)カーリー引用符の文字列の置換を行います今ハックを持っていますこれをstdlibで処理するために、他の非ASCII文字をasciiに変換することもできます。どんな助けでも大歓迎です。

答えて

4

strings.Mapの機能は、あなたが望むように私に見えます。

一般的な 'ToAscii'タイプの機能についてはわかりませんが、Mapには、ルーンを他のルーンにマッピングするための優れたアプローチがあります。

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 
} 

出力:

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

は、私はドキュメントで前にこれを見たことがなかった、それをいただき、ありがとうございます。そのような1つの関数で正規化を処理することに意味があります。 – dansackett

関連する問題