混淆ToUpper和ToTitle

时间:2013-09-01 14:54:27

标签: unicode go

ToUpperToTitle功能之间是否存在差异?

5 个答案:

答案 0 :(得分:10)

请参阅此示例,了解标题/大写的区别:

package main

import (
    "fmt"
    "strings"
)

func main() {
    str := "dz"
    fmt.Println(strings.ToTitle(str))
    fmt.Println(strings.ToUpper(str))
}

http://play.golang.org/p/xpDPLqKM9C

答案 1 :(得分:8)

我遇到了同样的问题。您希望使用strings.Title()方法而不是strings.ToTitle()方法。

http://golang.org/pkg/strings/#Title

答案 2 :(得分:2)

即使你在评论中说“源代码是相同的。”实际上并非如此(参见L255 vs L277)。因此,这两个函数执行不同的任务,完全如文档所述。有关“大写”和“标题案例”的定义,请参阅unicode.org上的文档。

答案 3 :(得分:2)

根据unicode.org

“由于包含某些复合字符的兼容性,例如U + 01F1拉丁大写字母dz,第三种情况称为titlecase,用于单词的第一个字符必须大写的地方。例如字符是U + 01F2拉丁字母大写字母d,带有小写字母z。三种形式是大写,标题和小写。“

这意味着当您对ToTitle这样的字符使用ToUpperdz时,您可能无法在视觉上区分结果,但这两种方法将返回不同的unicode代码点。

dz           = "\u01f3"
ToUpper(dz)  = "\u01f1"
ToTittle(dz) = "\u01f2"

https://play.golang.org/p/OAjONd87y2

答案 4 :(得分:2)

对于真正的标题案例转换功能,您必须使用 -

strings.Title(strings.ToLower(str))

我尝试了将字符串转换为标题大小写的答案,如果一个单词已经包含所有大写字符或者文本中大写字母很少而小写字母很少,则以下内容都不起作用。

这里全面检查了什么 - http://ideone.com/r7nVbZ

我在这里粘贴结果 -

Given Text:  title case
ToTitle:  TITLE CASE
ToUpper:  TITLE CASE
Title:  Title Case
ToLower then Title:  Title Case
-------------------------------

Given Text:  Title Case
ToTitle:  TITLE CASE
ToUpper:  TITLE CASE
Title:  Title Case
ToLower then Title:  Title Case
-------------------------------

Given Text:  TITLE CASE
ToTitle:  TITLE CASE
ToUpper:  TITLE CASE
Title:  TITLE CASE
ToLower then Title:  Title Case
-------------------------------

Given Text:  TiTlE CasE
ToTitle:  TITLE CASE
ToUpper:  TITLE CASE
Title:  TiTlE CasE
ToLower then Title:  Title Case
-------------------------------

Given Text:  Title case
ToTitle:  TITLE CASE
ToUpper:  TITLE CASE
Title:  Title Case
ToLower then Title:  Title Case
-------------------------------

Given Text:  title CASE
ToTitle:  TITLE CASE
ToUpper:  TITLE CASE
Title:  Title CASE
ToLower then Title:  Title Case