/ go

Работа с не ANSI символами в строках. Golang

В случае если мы работаем с обычными ANSI символами строках все понятно и все практически как везде. Мы можем работать со строкой посимвольно, примерно как с массивом или срезом. Можем получать срез строки и тд.

text := "test"
text[0] // получим 116, что равняется unicode коду символа "t"
string(text[0]) // получим "t"
text[1:] // получим "est"

Но как только мы начнем использовать не английский язык в строках все тут же сломается:

text := "тест"
text[0] // получим 209, что равняется unicode коду символа "Ñ"
string(text[0]) // получим "Ñ"
text[1:] // получим "�ест"

Самый простой ран устранить эту проблему это привести нашу строку к типу rune. После этого каждый символ нашей строки будет представлен 4х байтовым unicode кодом.

text := "тест"
runeText := []rune(text)
runeText[0] // получим 1090, что равняется unicode коду символа "т"
string(runeText[0]) // получим "т"
runeText[1:] // получим "[1077 1089 1090]" т.е теперь нужно использовать функцию string для вывода среза
string(runeText[1:]) //  получим "ест"