我有一个exe可以打印utf-8编码的字符串的字符串,其中带有特殊字符。 由于该exe是从控制台窗口使用的,因此它的输出被修改了,因为Windows使用了ibm850编码(aka code page 850)。
exe
ibm850
code page 850
您将如何确保go exe为控制台窗口打印正确编码的字符串,例如,打印:
éèïöîôùòèìë
而不是(不对正确的字符集进行任何翻译)
├®├¿├»├Â├«├┤├╣├▓├¿├¼├½
自2016年以来,您现在(2017年)就可以考虑使用golang.org/x/text,该编码随附了编码charmap,包括ISO-8859家族和Windows 1252字符集。
golang.org/x/text
请参阅“ 快速入门-在Golang中转换字符编码 ”
r := charmap.ISO8859_1.NewDecoder().Reader(f) io.Copy(out, r)
那是打开ISO-8859-1源文本(my_isotext.txt),创建目标文件(my_utf.txt)并将第一个复制到第二个示例的摘录。 但是,要从ISO-8859-1解码为UTF-8,我们需要f使用解码器包装原始文件阅读器()。
my_isotext.txt
my_utf.txt
f
我刚刚测试过(用于说明的伪代码):
package main import ( "fmt" "golang.org/x/text/encoding" "golang.org/x/text/encoding/charmap" ) func main() { t := "string composed of character in cp 850" d := charmap.CodePage850.NewDecoder() st, err := d.String(t) if err != nil { panic(err) } fmt.Println(st) }
结果是Windows CMD中可读的字符串。 在2018年11月的Reddit线程中查看更多信息。