如何使用go在Windows控制台中正确输出字符串?

Von*_*onC 7 windows utf-8 character-encoding go

我有一个exe输入打印utf-8编码的字符串,其中包含特殊字符.
由于该exe用于从控制台窗口使用,因此其输出被破坏,因为Windows使用ibm850编码(aka code page 850).

你将如何确保exe为控制台窗口打印正确编码的字符串,例如打印:

éèïöîôùòèìë
Run Code Online (Sandbox Code Playgroud)

而不是(没有任何翻译到正确的字符集)

?®?¿?»?Â?«???????¿?¼?½
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 2

自 2016 年以来,您现在(2017 年)可以考虑golang.org/x/text,它附带一个编码字符映射,包括 ISO-8859 系列以及 Windows 1252 字符集。

参见《Go Quick——转换Golang中的字符编码

r := charmap.ISO8859_1.NewDecoder().Reader(f)
io.Copy(out, r)
Run Code Online (Sandbox Code Playgroud)

my_isotext.txt这是打开 ISO-8859-1 源文本 ( )、创建目标文件 ( my_utf.txt) 并将第一个文件复制到第二个文件的示例摘录。但为了从 ISO-8859-1 解码为 UTF-8,我们用解码器
包装原始文件读取器 ( )。f

我刚刚测试过(用于说明的伪代码):

r := charmap.ISO8859_1.NewDecoder().Reader(f)
io.Copy(out, r)
Run Code Online (Sandbox Code Playgroud)

结果是在 Windows CMD 中可读的字符串。请参阅2018 年 11 月的 reddit 帖子
了解更多内容。