【问题标题】:Autodetect console output encoding in perlperl 中的自动检测控制台输出编码
【发布时间】:2010-06-06 10:30:34
【问题描述】:

我有一个 perl 脚本,可以用俄语将一些信息打印到控制台。脚本将在多个操作系统上执行,因此控制台编码可以是 cp866、koi8-r、utf-8 或其他。是否有一种检测控制台编码的便携方法,以便我可以相应地设置 STDOUT 以便正确打印文本?

【问题讨论】:

    标签: perl encoding console


    【解决方案1】:

    如果您使用的是 Windows,则有 Win32::Codepage

    【讨论】:

    • 脚本可以在任何操作系统上运行
    • 在 Windows 控制台上,这是我所知道的最佳解决方案。我不知道在 Linux 或其他类 Unix 系统上检测输出编码的方法。我通常将终端设置为 UTF-8 编码并将其用于 Perl。在 Windows 上,据我所知,无法设置终端窗口的代码页。至于便携式解决方案,那会很棒,但我不知道它是否存在。
    • 在 Windows 控制台编码设置为 chcp 程序,我想也有一个编程解决方案。无论如何,强制某些特定的控制台编码不是解决方案。
    • 这不会强制编码,它会检测编码。我什至不知道如何更改 Windows 控制台中的编码。
    • chcp /? 输出:“显示或设置活动代码页号。”
    【解决方案2】:

    【讨论】:

    • 不适用于 Windows。至少我没能成功。我相信它依赖于环境变量来检测通常不在 Windows 上设置的控制台编码。
    【解决方案3】:

    【讨论】:

    • 这很有趣:Term::Encoding::get_encoding() 在我的 Windows Server 2012 上使用 cygwin perl 返回 utf-8chcp 显示控制台实际上在 cp-437 中,但是 perl 脚本能够很好地打印非拉丁字符。所以我现在很困惑。
    • 找出为什么chcp 命令和GetConsoleOutputCP API 调用的输出不一致。尝试使用原生 Perl 而不是 Cygwin。
    猜你喜欢
    • 2015-04-25
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多