Не каждому известно, что кодировкой содержимого файлов .go
является UTF-8. Однако, это не единственная возможная кодировка. К примеру, пользователи Windows зачастую используют кодировку Windows-1250.
При работе со строками не в Юникоде вам нужно будет перевести содержимое в Юникод. Далее дана инструкция для кодирования и декодирования строк в Юникод и наоборот.
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
Как поменять кодировку строки в Golang?
1. Создайте файл win1250.txt
с содержимым Gdańsk
. Кодировкой файла должна быть windows-1250. Если вы не знаете, как это сделать, перейдите к шагу 4 и после выполнения шага 5, где создается файл в кодировке windows-1250, вы можете переименовать файл out.txt
, а затем вернуться к шагу 2;
2. Создайте файл decode.go
со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
package main import ( "fmt" "io/ioutil" "os" "strings" "golang.org/x/text/encoding/charmap" ) func main() { // Открывает файл windows-1250. f, err := os.Open("win1250.txt") if err != nil { panic(err) } defer f.Close() // Читает все в необработанной форме. b, err := ioutil.ReadAll(f) if err != nil { panic(err) } content := string(b) fmt.Println("Without decode: " + content) // Декодировать в unicode decoder := charmap.Windows1250.NewDecoder() reader := decoder.Reader(strings.NewReader(content)) b, err = ioutil.ReadAll(reader) if err != nil { panic(err) } fmt.Println("Decoded: " + string(b)) } |
3. Запустите код через go run decode.go
;
4. Посмотрите на вывод в терминале:
5. Создайте файл encode.go
со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package main import ( "io" "os" "golang.org/x/text/encoding/charmap" ) func main() { f, err := os.OpenFile("out.txt", os.O_CREATE|os.O_RDWR, os.ModePerm|os.ModeAppend) if err != nil { panic(err) } defer f.Close() // Декодирует в unicode encoder := charmap.Windows1250.NewEncoder() writer := encoder.Writer(f) io.WriteString(writer, "Gdańsk") } |
6. Запустите код через go run encode.go
;
7. Посмотрите на вывод в файле out.txt
с кодировкой Windows-1250 и UTF-8.
Как создать код для замены кодировки в файле Go?
В пакете charmap есть тип Charset
для простого изменения кодировки туда и обратно. Тип имплементирует NewDecoder
, что создает структуру Decoder
.
В шагах 1-3 показывается использование декодирования через Reader
.
Кодирование работает аналогичным образом. Кодирование Writer
создается, затем каждая строка записывается данным Writer
и кодируется в кодировку Windows-1250.
Обратите внимание, что кодировка Windows-1250 была выбрана в качестве примера. В данном пакете есть многие другие варианты кодировки символов.
Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»