Преобразование вывода командной строки с помощью байтовой строки UTF-8 в кодовую точку Unicode в Go - PullRequest
1 голос
/ 10 апреля 2019

Я запускаю исполняемый файл из Go через os.Exec, который дает мне следующий вывод: (\\xe2\\x96\\xb2). Вывод содержит строку байтов UTF-8, которую я хочу преобразовать в соответствующую кодовую точку Unicode (U + 25B2). То, что я ожидаю увидеть или пытаюсь преобразовать в: «(▲)». Я посмотрел на эту запись в блоге Go (https://blog.golang.org/strings),, но она начинается с интерпретированного строкового литерала, в то время как вывод команды выглядит как строковый литерал в формате Raw. Я пробовал strconv.Quote и strconv.Unquote, который не достигает того, что я ищу.

1 Ответ

0 голосов
/ 11 апреля 2019

Вы можете использовать пакет strconv для анализа строкового литерала, содержащего escape-последовательности.

Быстрый и грязный способ - просто добавить пропущенные кавычки и интерпретировать их как строку в кавычках, используя strconv.Unquote

s := `\xe2\x96\xb2`
s, err := strconv.Unquote(`"` + s + `"`)

Вы также можете напрямую анализировать строку по одному символу за раз (что делает Unquote внутри), используя strconv.UnquoteChar

s := `\xe2\x96\xb2`
buf := make([]byte, 0, 3*len(s)/2)
for len(s) > 0 {
    c, _, ss, err := strconv.UnquoteChar(s, 0)
    if err != nil {
        log.Fatal(err)
    }
    s = ss
    buf = append(buf, byte(c))
}
s = string(buf)

https://play.golang.org/p/6SDij9d-aRr

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...