当前位置: 首页 > 面试题库 >

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

房星光
2023-03-14
问题内容

我有一个exe可以打印utf-8编码的字符串的字符串,其中带有特殊字符。
由于该exe是从控制台窗口使用的,因此它的输出被修改了,因为Windows使用了ibm850编码(aka code page 850)。

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

éèïöîôùòèìë

而不是(不对正确的字符集进行任何翻译)

├®├¿├»├Â├«├┤├╣├▓├¿├¼├½

问题答案:

自2016年以来,您现在(2017年)就可以考虑使用golang.org/x/text,该编码随附了编码charmap,包括ISO-8859家族和Windows
1252字符集。

请参阅“ 快速入门-在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使用解码器包装原始文件阅读器()。

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

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线程中查看更多信息。



 类似资料:
  • 问题内容: 我有这个程序,它遍历ArrayList并使用System.out将各种与手机相关的信息打印到控制台。 我的问题是,名称较长的客户会“推”空格字符串,导致对齐混乱。有什么办法可以使对齐方式一致吗? 问题答案: 首先,您需要计算每列的最大宽度… 掌握这些信息后,您可以简单地使用生成一个值来填充,使其符合要求 这是我从先前关于类比主题的问题所修改的一个示例。 这将生成并输出类似的

  • 这似乎真的很疯狂,但在我的IntelliJ想法的控制台中,我不能用中断的编码做任何事情。 我为克服这一点所做的事情: 在

  • 问题内容: 我尝试了很多方法,例如 和 而且转义序列也不起作用 问题答案: 所有你需要的是 :

  • 问题内容: 我正在使用Pygame / SDL的操纵杆模块从游戏手柄获取输入。每次调用它的方法时,它都会打印到控制台。这是有问题的,因为我使用控制台来帮助我进行调试,现在每秒被淹没60次。有什么方法可以禁用此功能吗?通过Pygame / SDL中的选项还是在函数调用时取消控制台输出?我在Pygame文档中没有提到这一点。 编辑: 原来是由于在编译SDL库时打开了调试功能。 问题答案: 这是来自jo

  • 问题内容: 我想知道是否可以使用java String类在控制台上打印带下划线的文本。 问题答案: 您只能依靠控制台解释字符串的方式。例如,在中,您可以执行类似在转义序列之间插入字符串和(对于 粗体 )的操作: 您应该阅读自己喜欢的控制台的文档。

  • 我正在学习PowerShell,并使用Write Host检查新PowerShell脚本文件中的变量分配。然后我读到一篇文章,说这是个坏主意。 所以,在我的。ps1文件I替换了如下语句: ... 使用此选项: 但当我在Windows PowerShell ISE中运行保存的脚本时,没有向控制台写入任何输出。我在调用脚本的语句中附加了debug,如下所示: 但同样,输出没有写入控制台。显然我使用了错