V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
circsqua
V2EX  ›  编程

如何设置一个非终端启动的 CLI 程序写标准流内容的编码?

  •  
  •   circsqua · 2020-02-20 10:51:36 +08:00 · 3173 次点击
    这是一个创建于 1774 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,描述比较绕,解释如下
    在 windows 下 cmd
    默认代码活动页面是 936
    使用 ping 等内建命令,很多输出信息都做了本地化处理
    有 chcp 命令可以改变到 437,既英文

    但是如果我直接不经过 cmd,而是直接开启 ping 命令,应该怎样设置它的输出编码(地区)呢。

    我有了解可以先开启 cmd 本身,设置地区后再运行 cli 程序,但我想避免这一层。

    应用场合:需要调用系统 CLI 程序获取一些信息,但想避免因为输出信息本地化造成的分析障碍。

    同样的还有在 UNIX-like 的系统上。

    这个问题一时无法找到合适关键字去查找信息
    如果有 V 友了解,还请不吝赐教。
    THX
    4 条回复    2020-02-21 22:44:36 +08:00
    dandycheung
        1
    dandycheung  
       2020-02-20 10:52:53 +08:00 via iPhone
    去了解自己 create console 的相关知识。
    geelaw
        2
    geelaw  
       2020-02-20 11:32:12 +08:00 via iPhone
    更好的方法是去掉解析的需求,直接自己调用 API 查询信息。

    ping 的输出和当前 console 的 CP 没关系,你换一个 CP 只会导致输出按照另一个 CP 解读(如果不是 Unicode 输出)。我用英文系统,但默人 CP 是 936,程序的输出不会变成汉语。
    crella
        3
    crella  
       2020-02-20 12:16:57 +08:00 via Android
    建议你套 c#,用 c#提供的系统函数者套 console。

    我试过,c#套的 console 控制 ruby(win32),好像不能实现 gets 函数(类似于 c 的 scanf 函数),反正就是麻烦得要死
    circsqua
        4
    circsqua  
    OP
       2020-02-21 22:44:36 +08:00
    @dandycheung 查阅了下资料,发现要用到系统 API,暂时作罢。因为目前用的是 Qt

    @geelaw 那就奇怪了,ping 的输出本地化由谁控制?我系统中文语言,设置 cp 为英语或者 unicode 后就输出英文了,但设置日文却没有日文本地化,或许需要日文语言包吧……不过不重要了,后来发现 ping 的协议不能走代理。所以改用了 Qt 的网络库请求了搜索引擎主页以测算速度和连通性。虽然请求百度主页有问题,但是请求 bing 和 google 是 ok 的。在目标系统中这部分优先级不高,现就这样了。

    @crella 我目前不会 C#,测试过用 Qt 的 QProcess 套 console 控制 ping,读写都挺好的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2736 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:52 · PVG 22:52 · LAX 06:52 · JFK 09:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.