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

dan*_*ett 4 go

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

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

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

Joh*_*don 5

strings.Map功能在我看来就像你想要的那样.

我不知道一个通​​用的'ToAscii'类型函数,但Map有一个很好的方法将符文映射到其他符文.

示例(更新):

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
}
Run Code Online (Sandbox Code Playgroud)

输出:

Original: Hello “Frank” or ‹François› as you like to be ‘called’
Cleaned: Hello "Frank" or "François" as you like to be 'called'
Run Code Online (Sandbox Code Playgroud)