正如建议的那样,这里人名应该像John William Smith那样大写。
我正在用Golang编写一个小软件,它从用户的表单输入中获得姓和名。
在1.18之前,我使用的是:
lastname = strings.Title(strings.ToLower(strings.TrimSpace(lastname)))
firstname = strings.Title(strings.ToLower(strings.TrimSpace(firstname)))它可以工作,但现在使用1.18 strings.Title()。
他们建议改用golang.org/x/text/cases。
所以我想我应该把我的代码修改成这样:
caser := cases.Title(language.Und)
lastname = caser.Title(strings.ToLower(strings.TrimSpace(lastname)))
firstname = caser.Title(strings.ToLower(strings.TrimSpace(firstname)))和以前一样。
区别在于像ijsland这样的荷兰语,它的标题应该是IJsland,而不是Ijsland。
问题是
在行caser := cases.Title(language.Und)中,我使用Und,因为我不知道要使用什么语言标记。
我应该使用language.English或language.AmericanEnglish或其他吗?
到目前为止,就像strings.Title()在使用Und或English一样
发布于 2022-05-31 19:31:02
正如文档中提到的,不推荐使用strings.Title,您应该使用cases.Title。
弃用:用于字界的规则标题不能正确处理Unicode标点符号。改用golang.org/x/text/case。
下面是如何从两个角度使用它的示例代码:
// Straightforward approach
caser := cases.Title(language.BrazilianPortuguese)
titleStr := caser.String(str)
// Transformer interface aware approach
src := []byte(s)
dest := []byte(s) // dest can also be `dest := src`
caser := cases.Title(language.BrazilianPortuguese)
_, _, err := caser.Transform(dest, src, true)确保查看transform.Transformer.Transform和cases.Caser,以便了解每个参数和返回值的含义以及工具的局限性。例如:
Caser可能是有状态的,因此不应该在goroutines之间共享。
关于使用什么language,您应该知道它们在结果上的差异,除此之外,您应该对任何选择都很满意。这里有一份来自煎鱼关于差异的总结的副本,它为我清除了它:
围棋游乐场:https://go.dev/play/p/xp59r1BkC9L
func main() {
src := []string{
"hello world!",
"i with dot",
"'n ijsberg",
"here comes O'Brian",
}
for _, c := range []cases.Caser{
cases.Lower(language.Und),
cases.Upper(language.Turkish),
cases.Title(language.Dutch),
cases.Title(language.Und, cases.NoLower),
} {
fmt.Println()
for _, s := range src {
fmt.Println(c.String(s))
}
}
}具有以下输出
hello world!
i with dot
'n ijsberg
here comes o'brian
HELLO WORLD!
İ WİTH DOT
'N İJSBERG
HERE COMES O'BRİAN
Hello World!
I With Dot
'n IJsberg
Here Comes O'brian
Hello World!
I With Dot
'N Ijsberg
Here Comes O'Brian发布于 2022-03-25 20:10:11
到目前为止,
strings.Title()使用的是Und还是English?
strings.Title() works 基于ASCII,其中cases.Title()基于Unicode工作,因此无法获得完全相同的行为。
我应该使用language.English或language.AmericanEnglish或其他吗?
language.English,language.AmericanEnglish和language.Und似乎都拥有相同的标题规则。使用它们中的任何一个都可以使您得到与原始strings.Title()行为最接近的信息,就像您将要得到的那样。
在Unicode支持下使用此包的全部要点是,它在客观上更正确。因此,选择一个适合您的用户的标签。
发布于 2022-06-04 14:25:32
不建议使用strings.Title(str),应该改为cases.Title(language.Und, cases.NoLower).String(str)
package main
import (
"fmt"
"strings"
"golang.org/x/text/cases"
"golang.org/x/text/language"
)
func main() {
fmt.Println(strings.Title("abcABC")) // AbcABC
fmt.Println(cases.Title(language.Und, cases.NoLower).String("abcABC")) // AbcABC
}https://stackoverflow.com/questions/71620717
复制相似问题