Golang strconv.Quote
最后修改于 2025 年 4 月 20 日
本教程解释了如何在 Go 中使用 strconv.Quote
函数。我们将通过实际示例介绍字符串转义基础知识。
strconv.Quote
函数将字符串转换为 Go 字符串字面量。它会添加双引号并使用 Go 的转义序列转义特殊字符。
Quote 在生成 Go 源代码或安全显示字符串时非常有用。它处理所有特殊字符,包括换行符、制表符和 Unicode。
基本的 strconv.Quote 示例
strconv.Quote
最简单的用法是添加引号并转义字符串。在这里,我们演示了基本的字符串引用功能。
package main import ( "fmt" "strconv" ) func main() { s := "Hello, World!" quoted := strconv.Quote(s) fmt.Println("Original:", s) fmt.Println("Quoted:", quoted) }
我们将一个简单的字符串转换为 Go 字符串字面量。输出显示了原始版本和引用版本。引用的字符串带有围绕的双引号。
转义特殊字符
strconv.Quote
会自动转义特殊字符。此示例显示了它如何处理各种控制字符。
package main import ( "fmt" "strconv" ) func main() { s := "Line1\nLine2\tTab\"Quote" quoted := strconv.Quote(s) fmt.Println("Original:", s) fmt.Println("Quoted:", quoted) }
该字符串包含换行符、制表符和引号字符。引用的版本显示这些字符已被反斜杠序列转义。这使得字符串对 Go 代码是安全的。
处理 Unicode 字符
strconv.Quote
可以正确处理 Unicode 字符。非 ASCII 字符会使用 Unicode 转义序列进行转义。
package main import ( "fmt" "strconv" ) func main() { s := "Gö 语言 😊" quoted := strconv.Quote(s) fmt.Println("Original:", s) fmt.Println("Quoted:", quoted) }
该字符串包含非 ASCII 字符,包括表情符号。引用的版本使用 \u 和 \U 序列转义它们。这确保了跨系统的可移植性。
QuoteToASCII 函数
strconv.QuoteToASCII
将所有非 ASCII 字符转换为转义序列。此示例将其与常规 Quote 进行比较。
package main import ( "fmt" "strconv" ) func main() { s := "Nürnberg 日本" fmt.Println("Quote:", strconv.Quote(s)) fmt.Println("QuoteToASCII:", strconv.QuoteToASCII(s)) }
QuoteToASCII
确保输出仅包含 ASCII 字符。常规 Quote 可能会将某些 Unicode 字符保持未转义状态,如果它们是可打印的。
QuoteRune 函数
对于单个 rune,strconv.QuoteRune
提供类似的功能。此示例展示了引用单个 Unicode 字符。
package main import ( "fmt" "strconv" ) func main() { r := '世' quoted := strconv.QuoteRune(r) fmt.Printf("Rune: %U\n", r) fmt.Println("Quoted:", quoted) }
QuoteRune
会添加单引号并在需要时转义 rune。在处理单个 Unicode 代码点而不是字符串时,它很有用。
取消引用字符串
strconv.Unquote
函数可以撤销引用过程。此示例演示了如何将引用的字符串转换回其原始形式。
package main import ( "fmt" "strconv" ) func main() { quoted := `"Hello,\nWorld!"` s, err := strconv.Unquote(quoted) if err != nil { fmt.Println("Error:", err) return } fmt.Println("Quoted:", quoted) fmt.Println("Unquoted:", s) }
我们将一个引用的字符串字面量转换回普通字符串。该函数处理所有转义序列并返回原始字符串内容。
实际示例:JSON 编码
这个实际示例展示了在手动构建 JSON 字符串时如何使用 strconv.Quote
。正确的引用对于有效的 JSON 至关重要。
package main import ( "fmt" "strconv" ) func main() { name := "Alice" message := "Hello,\nWorld!" json := fmt.Sprintf(`{"name":%s,"message":%s}`, strconv.Quote(name), strconv.Quote(message)) fmt.Println("JSON:", json) }
我们通过引用值来手动构建 JSON 字符串。这确保了特殊字符在输出中被正确转义。结果是有效的 JSON。
来源
本教程通过各种场景下的字符串转义的实际示例,介绍了 Go 中的 strconv.Quote
函数。