我正在构建一个小工具,它解析用户的输入并找到写入时常见的陷阱并标记它们,以便用户可以改进其文本.到目前为止,除了与普通ASCII直引号相比具有卷曲引号的文本外,一切都运行良好.我现在有一个黑客攻击,它会用一个字符串替换来打开(和关闭)单个卷曲引号和双开(和关闭)卷曲引号,如下所示:
cleanedData := bytes.Replace([]byte(data), []byte("’"), []byte("'"), -1)
我觉得必须有更好的方法在stdlib中处理这个,所以我也可以将其他非ascii字符转换为ascii等价物.任何帮助将不胜感激.
该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)