Golang复合折叠grüßen

Sha*_*ley 13 unicode go case-folding

我试图让case折叠在三种语言(C++,Python和Golang)之间保持一致,因为我需要能够检查字符串是否与保存的字符串相匹配.

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

有没有办法做到这一点我缺少,或者unicode文档末尾的这个bug是否适用于golang文本转换的所有用法?如果是这样的话,除了在cgo中编写之外,我有什么选择案例折叠?

kos*_*tix 6

高级(启用Unicode的)文本处理不是Go stdlib的一部分,¹以golang.org/x/text/下的一系列("祝福")第三方包的形式存在.

正如肖恩自己想象的那样,人们可以做到

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

c := cases.Fold()
c.String("grüßen")
Run Code Online (Sandbox Code Playgroud)

得到"grüssen"回来.


¹那是因为stdlib中提供的任何内容都受Go 1兼容性承诺的约束 ,并且在Go 1发布时,某些功能无法使用或者不完整或其API处于不稳定状态等,因此这些位不在让他们成熟的核心.