Golang Complex Fold Grüßen

Я пытаюсь добиться того, чтобы сворачивание регистра было согласованным между тремя языками (C++, Python и Golang), потому что мне нужно иметь возможность проверить, соответствует ли строка сохраненному, независимо от языка.

Примером проблемного слова является немецкое слово "grüßen", которое в верхнем регистре означает "GRÜSSEN" (обратите внимание, что "ß" становится двумя символами как "SS").

Есть ли какой-нибудь способ сделать это, что я пропускаю, или эта ошибка в конце документации по Юникоду применима ко всем видам преобразования текста в 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 были в движении и т. Д., Поэтому такие биты хранились вне ядро, чтобы позволить им созреть.

Другие вопросы по тегам