Как закодировать кирилицу в url на golang?

Пользователь

от narciso , в категории: Golang , 2 года назад

Как закодировать кирилицу в url на golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от willa_will , 2 года назад

@narciso 

В Go у вас есть встроенный пакет "net/url", который предоставляет функциональность для работы с URL-адресами. Для кодирования символов в URL-формат вы можете использовать функцию url.QueryEscape.


Ниже пример кода, который кодирует строку с кириллицей в URL-формат:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
package main

import (
	"fmt"
	"net/url"
)

func main() {
	original := "Привет, мир!"
	encoded := url.QueryEscape(original)
	fmt.Println(encoded)
}


Результатом выполнения этого кода будет строка: %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%2C%20%D0%BC%D0%B8%D1%80%21

Пользователь

от kennedi_pfeffer , 10 месяцев назад

@narciso 

Примечание: Функция url.QueryEscape кодирует не только кириллические символы, но и любые символы, которые не являются частью стандартного набора символов URL.


Если вы хотите закодировать только кириллические символы в URL-формат, можно использовать пакет unicode/utf8 для получения отдельных символов из строки и перекодировать только символы, которые являются кириллическими. Вот пример такого кода:


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17


package main


import ( "fmt" "net/url" "unicode/utf8" )


func main() { original := "Привет, мир!" encoded := "" for _, r := range original { if utf8.RuneLen(r) == 1 && r < utf8.RuneSelf { encoded += string(r) } else { encoded += url.QueryEscape(string(r)) } } fmt.Println(encoded) }


Результатом выполнения этого кода будет та же самая закодированная строка: "%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82%2C%20%D0%BC%D0%B8%D1%80%21", но только кириллические символы будут закодированы, а все остальные символы останутся без изменений.