Golang Complex Fold Grüßen
Я пытаюсь добиться того, чтобы сворачивание регистра было согласованным между тремя языками (C++, Python и Golang), потому что мне нужно иметь возможность проверить, соответствует ли строка сохраненному, независимо от языка.
Примером проблемного слова является немецкое слово "grüßen", которое в верхнем регистре означает "GRÜSSEN" (обратите внимание, что "ß" становится двумя символами как "SS").
- C++ хорошо работает, используя документы преобразования текста boost::locale
- Python 3 также работает через str.casefold () casefold docs
- Тем не менее, у Голанга, похоже, нет способа правильно сложить чемодан. Пример детской площадки Голанга
Есть ли какой-нибудь способ сделать это, что я пропускаю, или эта ошибка в конце документации по Юникоду применима ко всем видам преобразования текста в golang? Если да, то какие у меня есть варианты сворачивания кейсов, кроме записи в cgo?
1 ответ
Расширенная (с поддержкой Unicode) обработка текста не входит в состав stdlib Go и существует в виде множества ("благословенных") сторонних пакетов под golang.org/x/text/
зонт
Как понял сам Шон, можно сделать
import (
"golang.org/x/text/cases"
)
c := cases.Fold()
c.String("grüßen")
чтобы вернуть "груссен".
¹ Это потому, что все, что поставляется в stdlib, подпадает под обещание совместимости с Go 1, и в то время, когда Go 1 был отправлен, некоторые функции были недоступны или были неполными, или его API были в движении и т. Д., Поэтому такие биты хранились вне ядро, чтобы позволить им созреть.