Skip to content

Instantly share code, notes, and snippets.

@jtorvald
Created November 26, 2020 13:44
Show Gist options
  • Save jtorvald/1d3a92319e61779db390f7c67d7a4be2 to your computer and use it in GitHub Desktop.
Save jtorvald/1d3a92319e61779db390f7c67d7a4be2 to your computer and use it in GitHub Desktop.
Normalize special characters in Go
package main
import (
"fmt"
"strings"
)
// https://play.golang.org/p/-U255E1eOf_O
func main() {
org := "ÀØėÿᾜὨζὅБю Yoùr Śtring šđč枊ĐČĆŽèàì - øÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"
normalized := strings.Map(normalize, org)
fmt.Println(org)
fmt.Println(normalized)
}
func normalize(r rune) rune {
switch r {
case 'IJ':
return 'I'
case 'Ö':
return 'O'
case 'Œ':
return 'O'
case 'Ü':
return 'U'
case 'ä':
return 'a'
case 'æ':
return 'a'
case 'ij':
return 'i'
case 'ö':
return 'o'
case 'œ':
return 'o'
case 'ü':
return 'u'
case 'ß':
return 's'
case 'ſ':
return 's'
case 'À':
return 'A'
case 'Á':
return 'A'
case 'Â':
return 'A'
case 'Ã':
return 'A'
case 'Ä':
return 'A'
case 'Å':
return 'A'
case 'Æ':
return 'A'
case 'Ā':
return 'A'
case 'Ą':
return 'A'
case 'Ă':
return 'A'
case 'Ç':
return 'C'
case 'Ć':
return 'C'
case 'Č':
return 'C'
case 'Ĉ':
return 'C'
case 'Ċ':
return 'C'
case 'Ď':
return 'D'
case 'Đ':
return 'D'
case 'È':
return 'E'
case 'É':
return 'E'
case 'Ê':
return 'E'
case 'Ë':
return 'E'
case 'Ē':
return 'E'
case 'Ę':
return 'E'
case 'Ě':
return 'E'
case 'Ĕ':
return 'E'
case 'Ė':
return 'E'
case 'Ĝ':
return 'G'
case 'Ğ':
return 'G'
case 'Ġ':
return 'G'
case 'Ģ':
return 'G'
case 'Ĥ':
return 'H'
case 'Ħ':
return 'H'
case 'Ì':
return 'I'
case 'Í':
return 'I'
case 'Î':
return 'I'
case 'Ï':
return 'I'
case 'Ī':
return 'I'
case 'Ĩ':
return 'I'
case 'Ĭ':
return 'I'
case 'Į':
return 'I'
case 'İ':
return 'I'
case 'Ĵ':
return 'J'
case 'Ķ':
return 'K'
case 'Ľ':
return 'K'
case 'Ĺ':
return 'K'
case 'Ļ':
return 'K'
case 'Ŀ':
return 'K'
case 'Ł':
return 'L'
case 'Ñ':
return 'N'
case 'Ń':
return 'N'
case 'Ň':
return 'N'
case 'Ņ':
return 'N'
case 'Ŋ':
return 'N'
case 'Ò':
return 'O'
case 'Ó':
return 'O'
case 'Ô':
return 'O'
case 'Õ':
return 'O'
case 'Ø':
return 'O'
case 'Ō':
return 'O'
case 'Ő':
return 'O'
case 'Ŏ':
return 'O'
case 'Ŕ':
return 'R'
case 'Ř':
return 'R'
case 'Ŗ':
return 'R'
case 'Ś':
return 'S'
case 'Ş':
return 'S'
case 'Ŝ':
return 'S'
case 'Ș':
return 'S'
case 'Š':
return 'S'
case 'Ť':
return 'T'
case 'Ţ':
return 'T'
case 'Ŧ':
return 'T'
case 'Ț':
return 'T'
case 'Ù':
return 'U'
case 'Ú':
return 'U'
case 'Û':
return 'U'
case 'Ū':
return 'U'
case 'Ů':
return 'U'
case 'Ű':
return 'U'
case 'Ŭ':
return 'U'
case 'Ũ':
return 'U'
case 'Ų':
return 'U'
case 'Ŵ':
return 'W'
case 'Ŷ':
return 'Y'
case 'Ÿ':
return 'Y'
case 'Ý':
return 'Y'
case 'Ź':
return 'Z'
case 'Ż':
return 'Z'
case 'Ž':
return 'Z'
case 'à':
return 'a'
case 'á':
return 'a'
case 'â':
return 'a'
case 'ã':
return 'a'
case 'ā':
return 'a'
case 'ą':
return 'a'
case 'ă':
return 'a'
case 'å':
return 'a'
case 'ç':
return 'c'
case 'ć':
return 'c'
case 'č':
return 'c'
case 'ĉ':
return 'c'
case 'ċ':
return 'c'
case 'ď':
return 'd'
case 'đ':
return 'd'
case 'è':
return 'e'
case 'é':
return 'e'
case 'ê':
return 'e'
case 'ë':
return 'e'
case 'ē':
return 'e'
case 'ę':
return 'e'
case 'ě':
return 'e'
case 'ĕ':
return 'e'
case 'ė':
return 'e'
case 'ƒ':
return 'f'
case 'ĝ':
return 'g'
case 'ğ':
return 'g'
case 'ġ':
return 'g'
case 'ģ':
return 'g'
case 'ĥ':
return 'h'
case 'ħ':
return 'h'
case 'ì':
return 'i'
case 'í':
return 'i'
case 'î':
return 'i'
case 'ï':
return 'i'
case 'ī':
return 'i'
case 'ĩ':
return 'i'
case 'ĭ':
return 'i'
case 'į':
return 'i'
case 'ı':
return 'i'
case 'ĵ':
return 'j'
case 'ķ':
return 'k'
case 'ĸ':
return 'k'
case 'ł':
return 'l'
case 'ľ':
return 'l'
case 'ĺ':
return 'l'
case 'ļ':
return 'l'
case 'ŀ':
return 'l'
case 'ñ':
return 'n'
case 'ń':
return 'n'
case 'ň':
return 'n'
case 'ņ':
return 'n'
case 'ʼn':
return 'n'
case 'ŋ':
return 'n'
case 'ò':
return 'o'
case 'ó':
return 'o'
case 'ô':
return 'o'
case 'õ':
return 'o'
case 'ø':
return 'o'
case 'ō':
return 'o'
case 'ő':
return 'o'
case 'ŏ':
return 'o'
case 'ŕ':
return 'r'
case 'ř':
return 'r'
case 'ŗ':
return 'r'
case 'ś':
return 's'
case 'š':
return 's'
case 'ť':
return 't'
case 'ù':
return 'u'
case 'ú':
return 'u'
case 'û':
return 'u'
case 'ū':
return 'u'
case 'ů':
return 'u'
case 'ű':
return 'u'
case 'ŭ':
return 'u'
case 'ũ':
return 'u'
case 'ų':
return 'u'
case 'ŵ':
return 'w'
case 'ÿ':
return 'y'
case 'ý':
return 'y'
case 'ŷ':
return 'y'
case 'ż':
return 'z'
case 'ź':
return 'z'
case 'ž':
return 'z'
case 'Α':
return 'A'
case 'Ά':
return 'A'
case 'Ἀ':
return 'A'
case 'Ἁ':
return 'A'
case 'Ἂ':
return 'A'
case 'Ἃ':
return 'A'
case 'Ἄ':
return 'A'
case 'Ἅ':
return 'A'
case 'Ἆ':
return 'A'
case 'Ἇ':
return 'A'
case 'ᾈ':
return 'A'
case 'ᾉ':
return 'A'
case 'ᾊ':
return 'A'
case 'ᾋ':
return 'A'
case 'ᾌ':
return 'A'
case 'ᾍ':
return 'A'
case 'ᾎ':
return 'A'
case 'ᾏ':
return 'A'
case 'Ᾰ':
return 'A'
case 'Ᾱ':
return 'A'
case 'Ὰ':
return 'A'
case 'ᾼ':
return 'A'
case 'Β':
return 'B'
case 'Γ':
return 'G'
case 'Δ':
return 'D'
case 'Ε':
return 'E'
case 'Έ':
return 'E'
case 'Ἐ':
return 'E'
case 'Ἑ':
return 'E'
case 'Ἒ':
return 'E'
case 'Ἓ':
return 'E'
case 'Ἔ':
return 'E'
case 'Ἕ':
return 'E'
case 'Ὲ':
return 'E'
case 'Ζ':
return 'Z'
case 'Η':
return 'I'
case 'Ή':
return 'I'
case 'Ἠ':
return 'I'
case 'Ἡ':
return 'I'
case 'Ἢ':
return 'I'
case 'Ἣ':
return 'I'
case 'Ἤ':
return 'I'
case 'Ἥ':
return 'I'
case 'Ἦ':
return 'I'
case 'Ἧ':
return 'I'
case 'ᾘ':
return 'I'
case 'ᾙ':
return 'I'
case 'ᾚ':
return 'I'
case 'ᾛ':
return 'I'
case 'ᾜ':
return 'I'
case 'ᾝ':
return 'I'
case 'ᾞ':
return 'I'
case 'ᾟ':
return 'I'
case 'Ὴ':
return 'I'
case 'ῌ':
return 'I'
case 'Θ':
return 'T'
case 'Ι':
return 'I'
case 'Ί':
return 'I'
case 'Ϊ':
return 'I'
case 'Ἰ':
return 'I'
case 'Ἱ':
return 'I'
case 'Ἲ':
return 'I'
case 'Ἳ':
return 'I'
case 'Ἴ':
return 'I'
case 'Ἵ':
return 'I'
case 'Ἶ':
return 'I'
case 'Ἷ':
return 'I'
case 'Ῐ':
return 'I'
case 'Ῑ':
return 'I'
case 'Ὶ':
return 'I'
case 'Κ':
return 'K'
case 'Λ':
return 'L'
case 'Μ':
return 'M'
case 'Ν':
return 'N'
case 'Ξ':
return 'K'
case 'Ο':
return 'O'
case 'Ό':
return 'O'
case 'Ὀ':
return 'O'
case 'Ὁ':
return 'O'
case 'Ὂ':
return 'O'
case 'Ὃ':
return 'O'
case 'Ὄ':
return 'O'
case 'Ὅ':
return 'O'
case 'Ὸ':
return 'O'
case 'Π':
return 'P'
case 'Ρ':
return 'R'
case 'Ῥ':
return 'R'
case 'Σ':
return 'S'
case 'Τ':
return 'T'
case 'Υ':
return 'Y'
case 'Ύ':
return 'Y'
case 'Ϋ':
return 'Y'
case 'Ὑ':
return 'Y'
case 'Ὓ':
return 'Y'
case 'Ὕ':
return 'Y'
case 'Ὗ':
return 'Y'
case 'Ῠ':
return 'Y'
case 'Ῡ':
return 'Y'
case 'Ὺ':
return 'Y'
case 'Φ':
return 'F'
case 'Χ':
return 'X'
case 'Ψ':
return 'P'
case 'Ω':
return 'O'
case 'Ώ':
return 'O'
case 'Ὠ':
return 'O'
case 'Ὡ':
return 'O'
case 'Ὢ':
return 'O'
case 'Ὣ':
return 'O'
case 'Ὤ':
return 'O'
case 'Ὥ':
return 'O'
case 'Ὦ':
return 'O'
case 'Ὧ':
return 'O'
case 'ᾨ':
return 'O'
case 'ᾩ':
return 'O'
case 'ᾪ':
return 'O'
case 'ᾫ':
return 'O'
case 'ᾬ':
return 'O'
case 'ᾭ':
return 'O'
case 'ᾮ':
return 'O'
case 'ᾯ':
return 'O'
case 'Ὼ':
return 'O'
case 'ῼ':
return 'O'
case 'α':
return 'a'
case 'ά':
return 'a'
case 'ἀ':
return 'a'
case 'ἁ':
return 'a'
case 'ἂ':
return 'a'
case 'ἃ':
return 'a'
case 'ἄ':
return 'a'
case 'ἅ':
return 'a'
case 'ἆ':
return 'a'
case 'ἇ':
return 'a'
case 'ᾀ':
return 'a'
case 'ᾁ':
return 'a'
case 'ᾂ':
return 'a'
case 'ᾃ':
return 'a'
case 'ᾄ':
return 'a'
case 'ᾅ':
return 'a'
case 'ᾆ':
return 'a'
case 'ᾇ':
return 'a'
case 'ὰ':
return 'a'
case 'ᾰ':
return 'a'
case 'ᾱ':
return 'a'
case 'ᾲ':
return 'a'
case 'ᾳ':
return 'a'
case 'ᾴ':
return 'a'
case 'ᾶ':
return 'a'
case 'ᾷ':
return 'a'
case 'β':
return 'b'
case 'γ':
return 'g'
case 'δ':
return 'd'
case 'ε':
return 'e'
case 'έ':
return 'e'
case 'ἐ':
return 'e'
case 'ἑ':
return 'e'
case 'ἒ':
return 'e'
case 'ἓ':
return 'e'
case 'ἔ':
return 'e'
case 'ἕ':
return 'e'
case 'ὲ':
return 'e'
case 'ζ':
return 'z'
case 'η':
return 'i'
case 'ή':
return 'i'
case 'ἠ':
return 'i'
case 'ἡ':
return 'i'
case 'ἢ':
return 'i'
case 'ἣ':
return 'i'
case 'ἤ':
return 'i'
case 'ἥ':
return 'i'
case 'ἦ':
return 'i'
case 'ἧ':
return 'i'
case 'ᾐ':
return 'i'
case 'ᾑ':
return 'i'
case 'ᾒ':
return 'i'
case 'ᾓ':
return 'i'
case 'ᾔ':
return 'i'
case 'ᾕ':
return 'i'
case 'ᾖ':
return 'i'
case 'ᾗ':
return 'i'
case 'ὴ':
return 'i'
case 'ῂ':
return 'i'
case 'ῃ':
return 'i'
case 'ῄ':
return 'i'
case 'ῆ':
return 'i'
case 'ῇ':
return 'i'
case 'θ':
return 't'
case 'ι':
return 'i'
case 'ί':
return 'i'
case 'ϊ':
return 'i'
case 'ΐ':
return 'i'
case 'ἰ':
return 'i'
case 'ἱ':
return 'i'
case 'ἲ':
return 'i'
case 'ἳ':
return 'i'
case 'ἴ':
return 'i'
case 'ἵ':
return 'i'
case 'ἶ':
return 'i'
case 'ἷ':
return 'i'
case 'ὶ':
return 'i'
case 'ῐ':
return 'i'
case 'ῑ':
return 'i'
case 'ῒ':
return 'i'
case 'ῖ':
return 'i'
case 'ῗ':
return 'i'
case 'κ':
return 'k'
case 'λ':
return 'l'
case 'μ':
return 'm'
case 'ν':
return 'n'
case 'ξ':
return 'k'
case 'ο':
return 'o'
case 'ό':
return 'o'
case 'ὀ':
return 'o'
case 'ὁ':
return 'o'
case 'ὂ':
return 'o'
case 'ὃ':
return 'o'
case 'ὄ':
return 'o'
case 'ὅ':
return 'o'
case 'ὸ':
return 'o'
case 'π':
return 'p'
case 'ρ':
return 'r'
case 'ῤ':
return 'r'
case 'ῥ':
return 'r'
case 'σ':
return 's'
case 'ς':
return 's'
case 'τ':
return 't'
case 'υ':
return 'y'
case 'ύ':
return 'y'
case 'ϋ':
return 'y'
case 'ΰ':
return 'y'
case 'ὐ':
return 'y'
case 'ὑ':
return 'y'
case 'ὒ':
return 'y'
case 'ὓ':
return 'y'
case 'ὔ':
return 'y'
case 'ὕ':
return 'y'
case 'ὖ':
return 'y'
case 'ὗ':
return 'y'
case 'ὺ':
return 'y'
case 'ῠ':
return 'y'
case 'ῡ':
return 'y'
case 'ῢ':
return 'y'
case 'ῦ':
return 'y'
case 'ῧ':
return 'y'
case 'φ':
return 'f'
case 'χ':
return 'x'
case 'ψ':
return 'p'
case 'ω':
return 'o'
case 'ώ':
return 'o'
case 'ὠ':
return 'o'
case 'ὡ':
return 'o'
case 'ὢ':
return 'o'
case 'ὣ':
return 'o'
case 'ὤ':
return 'o'
case 'ὥ':
return 'o'
case 'ὦ':
return 'o'
case 'ὧ':
return 'o'
case 'ᾠ':
return 'o'
case 'ᾡ':
return 'o'
case 'ᾢ':
return 'o'
case 'ᾣ':
return 'o'
case 'ᾤ':
return 'o'
case 'ᾥ':
return 'o'
case 'ᾦ':
return 'o'
case 'ᾧ':
return 'o'
case 'ὼ':
return 'o'
case 'ῲ':
return 'o'
case 'ῳ':
return 'o'
case 'ῴ':
return 'o'
case 'ῶ':
return 'o'
case 'ῷ':
return 'o'
case 'А':
return 'A'
case 'Б':
return 'B'
case 'В':
return 'V'
case 'Г':
return 'G'
case 'Д':
return 'D'
case 'Е':
return 'E'
case 'Ё':
return 'E'
case 'Ж':
return 'Z'
case 'З':
return 'Z'
case 'И':
return 'I'
case 'Й':
return 'I'
case 'К':
return 'K'
case 'Л':
return 'L'
case 'М':
return 'M'
case 'Н':
return 'N'
case 'О':
return 'O'
case 'П':
return 'P'
case 'Р':
return 'R'
case 'С':
return 'S'
case 'Т':
return 'T'
case 'У':
return 'U'
case 'Ф':
return 'F'
case 'Х':
return 'K'
case 'Ц':
return 'T'
case 'Ч':
return 'C'
case 'Ш':
return 'S'
case 'Щ':
return 'S'
case 'Ы':
return 'Y'
case 'Э':
return 'E'
case 'Ю':
return 'Y'
case 'Я':
return 'Y'
case 'а':
return 'A'
case 'б':
return 'B'
case 'в':
return 'V'
case 'г':
return 'G'
case 'д':
return 'D'
case 'е':
return 'E'
case 'ё':
return 'E'
case 'ж':
return 'Z'
case 'з':
return 'Z'
case 'и':
return 'I'
case 'й':
return 'I'
case 'к':
return 'K'
case 'л':
return 'L'
case 'м':
return 'M'
case 'н':
return 'N'
case 'о':
return 'O'
case 'п':
return 'P'
case 'р':
return 'R'
case 'с':
return 'S'
case 'т':
return 'T'
case 'у':
return 'U'
case 'ф':
return 'F'
case 'х':
return 'K'
case 'ц':
return 'T'
case 'ч':
return 'C'
case 'ш':
return 'S'
case 'щ':
return 'S'
case 'ы':
return 'Y'
case 'э':
return 'E'
case 'ю':
return 'Y'
case 'я':
return 'Y'
case 'ð':
return 'd'
case 'Ð':
return 'D'
case 'þ':
return 't'
case 'Þ':
return 'T'
case 'ა':
return 'a'
case 'ბ':
return 'b'
case 'გ':
return 'g'
case 'დ':
return 'd'
case 'ე':
return 'e'
case 'ვ':
return 'v'
case 'ზ':
return 'z'
case 'თ':
return 't'
case 'ი':
return 'i'
case 'კ':
return 'k'
case 'ლ':
return 'l'
case 'მ':
return 'm'
case 'ნ':
return 'n'
case 'ო':
return 'o'
case 'პ':
return 'p'
case 'ჟ':
return 'z'
case 'რ':
return 'r'
case 'ს':
return 's'
case 'ტ':
return 't'
case 'უ':
return 'u'
case 'ფ':
return 'p'
case 'ქ':
return 'k'
case 'ღ':
return 'g'
case 'ყ':
return 'q'
case 'შ':
return 's'
case 'ჩ':
return 'c'
case 'ც':
return 't'
case 'ძ':
return 'd'
case 'წ':
return 't'
case 'ჭ':
return 'c'
case 'ხ':
return 'k'
case 'ჯ':
return 'j'
case 'ჰ':
return 'h'
}
return r
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment