Как вывести кириллицу в браузер на GO? Добрый день, есть код, пример из интернета, выводящий текст из адресной строки. Допустим 1. Переход на example.com/test выведет нам "Hello test" 2. Переход на example.com/тест выведет "Hello %D1%82%D0%B5%D1%81%D1%82" Гугл говорит использовать "net/url", но при попытке получаю ошибку:./index.go:16:35: url.PathUnescape undefined (type string has no field or method PathUnescape) Полный код:package main import ( "net/http" "strings" "net/url" ) func sayHello(w http.ResponseWriter, r *http.Request) { name := "World" url := strings.Trim(r.RequestURI, "/") if len(url) > 0 { name = strings.Split(url, "/")[0] name = strings.ToUpper(name[0:1]) + name[1:] // change first symbol to Uppercase } w.Write([]byte("Hello, " + url.PathUnescape(name) + "!")) } func main() { http.HandleFunc("/", sayHello) err := http.ListenAndServe(":9001", nil) if err != nil { panic(err.Error()) } } Собственно вопрос, как штатными методами реализуется конвертация % в читаемый вид? Уж очень нужны кириллические урлы.
Проблема в вашем коде состоит в том, что вы пытаетесь вызвать метод PathUnescape у значения строки url, а не у пакета net/url. Для конвертации URL-кодированных символов в читаемый вид вам нужно использовать функцию QueryUnescape из пакета net/url.
Вот исправленный код:
package main import ( "net/http" "strings" "net/url" ) func sayHello(w http.ResponseWriter, r *http.Request) { name := "World" url := strings.Trim(r.RequestURI, "/") if len(url) > 0 { name = strings.Split(url, "/")[0] name = strings.ToUpper(name[0:1]) + name[1:] // change first symbol to Uppercase } decodedName, err := url.QueryUnescape(name) if err != nil { panic(err.Error()) } w.Write([]byte("Hello, " + decodedName + "!")) } func main() { http.HandleFunc("/", sayHello) err := http.ListenAndServe(":9001", nil) if err != nil { panic(err.Error()) } }
Теперь при переходе на example.com/тест выведет "Hello тест" вместо "Hello %D1%82%D0%B5%D1%81%D1%82".
Проблема в вашем коде состоит в том, что вы пытаетесь вызвать метод PathUnescape у значения строки url, а не у пакета net/url. Для конвертации URL-кодированных символов в читаемый вид вам нужно использовать функцию QueryUnescape из пакета net/url.
Вот исправленный код:
package mainimport (
"net/http"
"strings"
"net/url"
)
func sayHello(w http.ResponseWriter, r *http.Request) {
name := "World"
url := strings.Trim(r.RequestURI, "/")
if len(url) > 0 {
name = strings.Split(url, "/")[0]
name = strings.ToUpper(name[0:1]) + name[1:] // change first symbol to Uppercase
}
decodedName, err := url.QueryUnescape(name)
if err != nil {
panic(err.Error())
}
w.Write([]byte("Hello, " + decodedName + "!"))
}
func main() {
http.HandleFunc("/", sayHello)
err := http.ListenAndServe(":9001", nil)
if err != nil {
panic(err.Error())
}
}
Теперь при переходе на example.com/тест выведет "Hello тест" вместо "Hello %D1%82%D0%B5%D1%81%D1%82".