ZetCode

Golang strconv.QuoteToASCII

最后修改于 2025 年 4 月 20 日

本教程将讲解如何在 Go 中使用 strconv.QuoteToASCII 函数。我们将通过实际示例涵盖字符串引用的基础知识。

strconv.QuoteToASCII 函数将字符串转换为仅包含 ASCII 字符的带引号字符串。非 ASCII 字符将使用 Go 的转义序列进行转义。

当您需要在仅限 ASCII 的环境中表示字符串,或者希望安全地显示不可打印字符时,此函数非常有用。

基本的 strconv.QuoteToASCII 示例

strconv.QuoteToASCII 最简单的用法是将字符串转换为其 ASCII 引用的表示形式。这里我们演示了基本用法。

basic_quote.go
package main

import (
    "fmt"
    "strconv"
)

func main() {
    str := "Hello, 世界"
    
    quoted := strconv.QuoteToASCII(str)
    fmt.Printf("Original: %s\nQuoted: %s\n", str, quoted)
}

我们将包含非 ASCII 字符的字符串转换为 ASCII 引用的字符串。输出显示了 Unicode 字符在引用版本中是如何被转义的。

引用特殊字符

strconv.QuoteToASCII 会处理换行符和制表符等特殊字符。此示例显示了它们在输出中的表示方式。

special_chars.go
package main

import (
    "fmt"
    "strconv"
)

func main() {
    str := "Line1\nLine2\tTab"
    
    quoted := strconv.QuoteToASCII(str)
    fmt.Printf("Original: %s\nQuoted: %s\n", str, quoted)
}

换行符和制表符等特殊字符在引用的输出中会被转义。这使得字符串表示形式对于仅限 ASCII 的环境来说是安全的。

引用空字符串

该函数一致地处理空字符串等边缘情况。此示例显示了对空字符串和仅包含空格的字符串的行为。

empty_string.go
package main

import (
    "fmt"
    "strconv"
)

func main() {
    empty := ""
    space := "   "
    
    fmt.Println("Empty:", strconv.QuoteToASCII(empty))
    fmt.Println("Spaces:", strconv.QuoteToASCII(space))
}

空字符串会被引用为两个双引号。空格字符会被保留,但与其他字符一样会被引用。

比较 Quote 和 QuoteToASCII

此示例将 QuoteToASCII 与常规的 Quote 函数进行比较,以突出它们的区别。

compare_quote.go
package main

import (
    "fmt"
    "strconv"
)

func main() {
    str := "Hello, 世界"
    
    fmt.Println("Quote:", strconv.Quote(str))
    fmt.Println("QuoteToASCII:", strconv.QuoteToASCII(str))
}

Quote 会保留 Unicode 字符,而 QuoteToASCII 会转义它们。当需要 ASCII 输出时,请使用 QuoteToASCII

引用控制字符

QuoteToASCII 会正确转义控制字符。此示例演示了它们的表示方式。

control_chars.go
package main

import (
    "fmt"
    "strconv"
)

func main() {
    str := string([]byte{0, 1, 2, 31, 127})
    
    quoted := strconv.QuoteToASCII(str)
    fmt.Printf("Original: %q\nQuoted: %s\n", str, quoted)
}

不可打印的控制字符将使用十六进制表示法进行转义。这使得它们可见,并且对于 ASCII 输出是安全的。

引用用于 JSON 的字符串

QuoteToASCII 可用于准备 JSON 输出的字符串。此示例展示了它如何转义 JSON 字符串中可能出现的特殊字符。

json_quoting.go
package main

import (
    "fmt"
    "strconv"
)

func main() {
    str := `{"name": "John", "age": 30}`
    
    quoted := strconv.QuoteToASCII(str)
    fmt.Println("Quoted JSON:", quoted)
}

该函数会正确转义 JSON 字符串中可能出现的引号和其他特殊字符。这有助于防止 JSON 解析错误。

实际示例:记录非 ASCII 数据

这个实际示例演示了如何使用 QuoteToASCII 安全地记录可能包含非 ASCII 字符的字符串。

logging.go
package main

import (
    "fmt"
    "strconv"
)

func logSafe(message string) {
    safeMsg := strconv.QuoteToASCII(message)
    fmt.Println("LOG:", safeMsg)
}

func main() {
    logSafe("Normal message")
    logSafe("Message with Unicode: 日本語")
    logSafe("Message with control chars: \x00\x1F")
}

logSafe 函数确保所有记录的消息都对 ASCII 安全。这可以防止在期望仅限 ASCII 输入的系统中出现编码问题。

来源

Go strconv 包文档

本教程通过在各种场景下使用字符串引用的实际示例,介绍了 Go 中的 strconv.QuoteToASCII 函数。

作者

我的名字是 Jan Bodnar,我是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Go 教程