20

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

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

4

8 回答 8

17
package main

import "fmt"
import "strconv"

func main() {
    quoted := strconv.QuoteRuneToASCII('啊') // quoted = "'\u554a'"
    unquoted := quoted[1:len(quoted)-1]      // unquoted = "\u554a"
    fmt.Println(unquoted)
}

这输出:

\u554a
于 2013-05-22T03:19:41.307 回答
12

恕我直言,应该更好:

func RuneToAscii(r rune) string {
    if r < 128 {
        return string(r)
    } else {
        return "\\u" + strconv.FormatInt(int64(r), 16)
    }
}
于 2013-05-22T05:49:03.967 回答
4

您可以使用fmt.Sprintfwith%U来获取十六进制值:

test = fmt.Sprintf("%U", '啊')
fmt.Println("\\u" + test[2:]) // Print \u554A
于 2013-05-22T03:22:46.143 回答
1

例如,

package main

import "fmt"

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

输出:

啊 U+554A
于 2013-05-22T03:15:24.723 回答
1
fmt.Printf("\\u%X", '啊')

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

(大写或小写“x”将控制十六进制字符的大小写)

正如包 fmt 的文档所暗示的那样:

%U Unicode 格式:U+1234;与 "U+%04X" 相同

于 2013-05-26T15:01:49.140 回答
0
package main

import "fmt"

func main() {
    fmt.Printf("%+q", '啊')
}
于 2019-05-03T12:05:32.037 回答
0

这会做的工作..

package main

import (
    "fmt"
)

func main() {
    str := fmt.Sprintf("%s", []byte{0x80})
    fmt.Println(str)
}
于 2019-04-23T00:30:01.010 回答
0

我想补充一下 hardPass 的答案。

如果 unicode 的十六进制表示少于 4 个字符(例如 ü)strconv.FormatInt\ufc这将导致 Go 中的 unicode 语法错误。\u00fc与Go 所理解的完全相反。

fmt.Sprintf使用with hex 格式用零填充十六进制将解决此问题:

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

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

于 2019-01-02T18:47:25.563 回答