How to convert a rune to unicode-style-string like `\u554a` in Golang?

后端 未结 8 1752
心在旅途
心在旅途 2021-02-05 07:47

If you run fmt.Println(\"\\u554a\"), it shows \'啊\'.

But how to get unicode-style-string \\u554a from a rune \'啊\' ?

相关标签:
8条回答
  • 2021-02-05 08:17

    This would do the job..

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        str := fmt.Sprintf("%s", []byte{0x80})
        fmt.Println(str)
    }
    
    0 讨论(0)
  • 2021-02-05 08:18

    For example,

    package main
    
    import "fmt"
    
    func main() {
        r := rune('啊')
        u := fmt.Sprintf("%U", r)
        fmt.Println(string(r), u)
    }
    

    Output:

    啊 U+554A
    
    0 讨论(0)
  • 2021-02-05 08:24
    package main
    
    import "fmt"
    import "strconv"
    
    func main() {
        quoted := strconv.QuoteRuneToASCII('啊') // quoted = "'\u554a'"
        unquoted := quoted[1:len(quoted)-1]      // unquoted = "\u554a"
        fmt.Println(unquoted)
    }
    

    This outputs:

    \u554a
    
    0 讨论(0)
  • 2021-02-05 08:24

    You can use fmt.Sprintf along with %U to get the hexadecimal value:

    test = fmt.Sprintf("%U", '啊')
    fmt.Println("\\u" + test[2:]) // Print \u554A
    
    0 讨论(0)
  • 2021-02-05 08:27

    I'd like to add to the answer that hardPass has.

    In the case where the hex representation of the unicode is less that 4 characters (ü for example) strconv.FormatInt will result in \ufc which will result in a unicode syntax error in Go. As opposed to the full \u00fc that Go understands.

    Padding the hex with zeros using fmt.Sprintf with hex formatting will fix this:

    func RuneToAscii(r rune) string {
        if r < 128 {
            return string(r)
        } else {
            return fmt.Sprintf("\\u%04x", r)
        }
    }
    

    https://play.golang.org/p/80w29oeBec1

    0 讨论(0)
  • 2021-02-05 08:29
    package main
    
    import "fmt"
    
    func main() {
        fmt.Printf("%+q", '啊')
    }
    
    0 讨论(0)
提交回复
热议问题