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

2020-02-20 10:51:36 +08:00
 circsqua
如题,描述比较绕,解释如下
在 windows 下 cmd
默认代码活动页面是 936
使用 ping 等内建命令,很多输出信息都做了本地化处理
有 chcp 命令可以改变到 437,既英文

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

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

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

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

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

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

我试过,c#套的 console 控制 ruby(win32),好像不能实现 gets 函数(类似于 c 的 scanf 函数),反正就是麻烦得要死
circsqua
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,读写都挺好的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/646040

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX