栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

以字符集安全的方式获取Windows上的进程列表

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

以字符集安全的方式获取Windows上的进程列表

可以分为两部分:

  1. Windows部分
    在Java中,您正在执行Windows命令-在“ Windows Land”中的jvm外部。当Java
    Runtime类执行Windows命令时,它将DLL用于控制台,因此出现在Windows中,就像命令在控制台中运行一样。 问:当我 在控制台中
    运行C: windows system32 tasklist.exe时,结果的字符编码(Windows术语中的“代码页”)?


    • 没有参数的Windows“ chcp”命令给出了控制台的活动代码页号(例如对于Multilingual-Latin-1是850,对于Latin-1是1252)。请参阅Windows Microsoft代码页, Windows OEM代码页, Windows ISO代码页
      最初根据系统区域设置来设置默认的系统代码页(键入systeminfo以查看此内容或通过“控制面板”->“区域和语言”)。

    • Windows OS / .NET函数getACP()也提供此信息

  1. Java部分:
    如何从Windows代码页“ x”(例如850或1252)中解码Java字节流?
* Windows代码页号和等效Java字符集名称之间的完整映射可以从[此处](http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756%28v=vs.85%29.aspx)导出[-代码页标识符(Windows)](http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756%28v=vs.85%29.aspx)* 但是,实际上,可以添加以下前缀之一来实现映射:

对于ISO,“”(无),对于OEM,“ IBM”或“ x-IBM”,对于Microsoft,“ windows-”或“ x-windows-” /视窗。
例如ISO-8859-1或IBM850或Windows-1252

完整解决方案:

    String cmd = System.getenv("windir") + "\system32\" + "chcp.com";    Process p = Runtime.getRuntime().exec(cmd);    // Use default charset here - only want digits which are "core UTF8/UTF16";     // ignore text preceding ":"    String windowsCodePage = new Scanner(        new InputStreamReader(p.getInputStream())).skip(".*:").next();    Charset charset = null;    String[] charsetPrefixes =         new String[] {"","windows-","x-windows-","IBM","x-IBM"};    for (String charsetPrefix : charsetPrefixes) {        try { charset = Charset.forName(charsetPrefix+windowsCodePage); break;        } catch (Throwable t) {        }    }    // If no match found, use default charset    if (charset == null) charset = Charset.defaultCharset();    cmd = System.getenv("windir") + "\system32\" + "tasklist.exe";    p = Runtime.getRuntime().exec(cmd);    InputStreamReader isr = new InputStreamReader(p.getInputStream(), charset);    BufferedReader input = new BufferedReader(isr);    // Debugging output    System.out.println("matched prepage "+windowsCodePage+" to charset name:"+ charset.name()+" displayName:"+charset.displayName());    String line;    while ((line = input.readLine()) != null) {System.out.println(line);    }

感谢您的提问!- 很有趣。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507206.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号