【问题标题】:Golang complex fold grüßenGolang 复杂褶皱 grüßen
【发布时间】:2017-03-28 02:59:29
【问题描述】:

我试图让大小写折叠在三种语言(C++、Python 和 Golang)之间保持一致,因为我需要能够检查字符串是否与保存的字符串匹配,无论是哪种语言。

一个有问题的单词示例是德语单词“grüßen”,它的大写字母是“GRÜSSEN”(注意“ß”变成了两个字符为“SS”)。

是否有一些我遗漏的方法可以做到这一点,或者unicode's documentation 末尾的这个错误是否适用于 golang 中文本转换的所有用法?如果是这样,除了在 cgo 中编写之外,我还有哪些案例折叠选项?

【问题讨论】:

  • 鉴于 golang 实现了 func to(_case int, r rune, caseRange []CaseRange) rune { 的大写功能,是否甚至可以返回多个规则。
  • 是的,这就是我想要达到的目的。在某些语言中,一个“符文”可以通过大小写折叠/大写变成两个,所以应该有一种方法可以在 golang 中处理这样的事情。
  • 如果您最终创建了一个问题,请在此处发布一个链接(因为我认为那里没有可以正确转换它的东西)
  • 有趣,而且有点相关:unicode.org/Public/UCD/latest/ucd/CaseFolding.txt 全大小写折叠是棘手的 unicode 代码点(在 Go 中不起作用)
  • 不在核心:请看看golang.org/x/text能为你做什么。

标签: go unicode case-folding


【解决方案1】:

高级(支持 Unicode)文本处理不是 Go 标准库的一部分,¹ 并以大量(“祝福”)第三方包的形式存在 在golang.org/x/text/ umbrella下。

Shawn 自己想通了,我们可以做到

import (
  "golang.org/x/text/cases"
)

c := cases.Fold()
c.String("grüßen")

让“grüssen”回来。


¹ 那是因为标准库中的任何内容都受制于 Go 1 compatibility promise, 在 Go 1 发布时,某些功能不可用 或者是不完整的,或者它的 API 不断变化等,所以这些位被排除在外 让他们成熟。

【讨论】:

  • c.String("grüßen") 实际上返回 grüssen,而不是 GRÜSSEN。
猜你喜欢
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 2016-12-17
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多