Я запускаю исполняемый файл из Go через os.Exec, что дает мне следующий результат: (\\xe2\\x96\\xb2)
. Вывод содержит строку байтов UTF-8, которую я хочу преобразовать в соответствующую кодовую точку Unicode (U+25B2). То, что я ожидаю увидеть или пытаюсь преобразовать, это: «(▲)».
Я просмотрел эту запись в блоге Go (https://blog.golang.org/strings), но она начинается с интерпретируемого строкового литерала, тогда как вывод команды кажется необработанным строковым литералом. Я пробовал strconv.Quote
и strconv.Unquote
, но это не дает того, что я ищу.
Возможно, я недостаточно ясно выразился в приведенном выше описании. Выходная строка, которую я получаю, не интерпретируется автоматически, потому что она ведет себя как необработанный строковый литерал. См. здесь: play.golang.org/p/TI-41dEWZaM
Вы можете использовать пакет 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)
Можете ли вы показать пример того, что вы пытаетесь сделать? Так как go использует utf8 для строк, он по умолчанию правильно интерпретирует байты: play.golang.org/p/u3JkywATmPR