在Golang中将文本输入规范化为ASCII

时间:2016-04-01 16:10:43

标签: go

我正在构建一个小工具,用于解析用户的输入并找到写入时常见的陷阱并标记它们,以便用户可以改进其文本。到目前为止,除了与普通ASCII直引号相比具有卷曲引号的文本外,一切都运行良好。我现在有一个黑客攻击,它会用一个字符串替换来打开(和关闭)单个卷曲引号和双开(和关闭)卷曲引号,如下所示:

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

我觉得必须有更好的方法在stdlib中处理这个,所以我也可以将其他非ascii字符转换为ascii等价物。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:5)

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'