Skip to content

Instantly share code, notes, and snippets.

@kayrus
Created May 21, 2019 05:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kayrus/66e30b750f9511ac1195b6b992ef19eb to your computer and use it in GitHub Desktop.
Save kayrus/66e30b750f9511ac1195b6b992ef19eb to your computer and use it in GitHub Desktop.
package env
import (
"os"
"syscall"
"golang.org/x/sys/windows"
"golang.org/x/text/encoding/charmap"
)
func Get(s string) string {
var st uint32
env := os.Getenv(s)
if windows.GetConsoleMode(windows.Handle(syscall.Stdin), &st) == nil ||
windows.GetConsoleMode(windows.Handle(syscall.Stdout), &st) == nil ||
windows.GetConsoleMode(windows.Handle(syscall.Stderr), &st) == nil {
// detect windows console, should be skipped in cygwin environment
var cm charmap.Charmap
switch windows.GetACP() {
case 37:
cm = *charmap.CodePage037
case 1047:
cm = *charmap.CodePage1047
case 1140:
cm = *charmap.CodePage1140
case 437:
cm = *charmap.CodePage437
case 850:
cm = *charmap.CodePage850
case 852:
cm = *charmap.CodePage852
case 855:
cm = *charmap.CodePage855
case 858:
cm = *charmap.CodePage858
case 860:
cm = *charmap.CodePage860
case 862:
cm = *charmap.CodePage862
case 863:
cm = *charmap.CodePage863
case 865:
cm = *charmap.CodePage865
case 866:
cm = *charmap.CodePage866
case 28591:
cm = *charmap.ISO8859_1
case 28592:
cm = *charmap.ISO8859_2
case 28593:
cm = *charmap.ISO8859_3
case 28594:
cm = *charmap.ISO8859_4
case 28595:
cm = *charmap.ISO8859_5
case 28596:
cm = *charmap.ISO8859_6
case 28597:
cm = *charmap.ISO8859_7
case 28598:
cm = *charmap.ISO8859_8
case 28599:
cm = *charmap.ISO8859_9
case 28600:
cm = *charmap.ISO8859_10
case 28603:
cm = *charmap.ISO8859_13
case 28604:
cm = *charmap.ISO8859_14
case 28605:
cm = *charmap.ISO8859_15
case 28606:
cm = *charmap.ISO8859_16
case 20866:
cm = *charmap.KOI8R
case 21866:
cm = *charmap.KOI8U
case 1250:
cm = *charmap.Windows1250
case 1251:
cm = *charmap.Windows1251
case 1252:
cm = *charmap.Windows1252
case 1253:
cm = *charmap.Windows1253
case 1254:
cm = *charmap.Windows1254
case 1255:
cm = *charmap.Windows1255
case 1256:
cm = *charmap.Windows1256
case 1257:
cm = *charmap.Windows1257
case 1258:
cm = *charmap.Windows1258
case 874:
cm = *charmap.Windows874
default:
return env
}
if v, err := cm.NewEncoder().String(env); err == nil {
return v
}
}
return env
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment