迎接 Golang 复杂的折叠

Golang complex fold grüßen

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

一个有问题的单词示例是德语单词 "grüßen",大写为 "GRÜSSEN"(请注意,'ß' 变成两个字符,如 'SS')。

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

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

Shawn 自己想通了,可以做到

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

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

让 "grüssen" 回来。


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