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