Подтвердить что ты не робот

Как преобразовать руну в строку в стиле Юникод, например `\ u554a` в Голанге?

Если вы запустите fmt.Println("\u554a"), он отобразит "啊".

Но как получить строку unicode-style \u554a из руны '啊'?

4b9b3361

Ответ 1

ИМХО, должно быть лучше:

func RuneToAscii(r rune) string {
    if r < 128 {
        return string(r)
    } else {
        return "\\u" + strconv.FormatInt(int64(r), 16)
    }
}

Ответ 2

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

Ответ 3

Вы можете использовать fmt.Sprintf вместе с %U, чтобы получить шестнадцатеричное значение:

test = fmt.Sprintf("%U", '啊')
fmt.Println("\\u" + test[2:]) // Print \u554A

Ответ 4

Например,

package main

import "fmt"

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

Вывод:

啊 U+554A

Ответ 5

fmt.Printf("\\u%X", '啊')

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

(Верхний или нижний регистр "x" будет управлять случаем шестнадцатеричных символов)

Как указано в пакете fmt документация:

% U Формат Unicode: U + 1234; то же, что и "U +% 04X"

Ответ 6

Я хотел бы добавить к ответу, который имеет hardPass.

В случае, когда шестнадцатеричное представление юникода меньше 4 символов (например, ü), strconv.FormatInt приведет к \ufc что приведет к ошибке синтаксиса юникода в Go. В отличие от полной \u00fc которую понимает Go.

Заполнение гексагона нулями с помощью fmt.Sprintf с шестнадцатеричным форматированием исправит это:

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

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

Ответ 7

Это сделало бы работу..

package main

import (
    "fmt"
)

func main() {
    str := fmt.Sprintf("%s", []byte{0x80})
    fmt.Println(str)
}

Ответ 8

package main

import "fmt"

func main() {
    fmt.Printf("%+q", '啊')
}