【问题标题】:Normalizing text input to ASCII将文本输入规范化为 ASCII
【发布时间】:2016-04-01 16:10:43
【问题描述】:

我正在构建一个小工具,它可以解析用户的输入并发现写作中的常见缺陷并标记它们,以便用户可以改进他们的文本。到目前为止,除了带有弯引号的文本与普通的 ASCII 直引号相比,一切都运行良好。我现在有一个 hack,它将对打开(和关闭)单花引号和双打开(和关闭)花括号进行字符串替换,如下所示:

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

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

【问题讨论】:

标签: go


【解决方案1】:

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'

【讨论】:

  • 谢谢你,我之前在文档中没有看到这个。在这样的一个函数中处理标准化是有意义的。
猜你喜欢
  • 2021-09-28
  • 2012-05-31
  • 2018-04-23
  • 1970-01-01
  • 2023-01-25
  • 2011-11-14
  • 2012-02-20
  • 2021-10-18
  • 2019-09-19
相关资源
最近更新 更多