在调用进程之前更改Windows中的语言

时间:2014-06-05 12:19:27

标签: java python windows locale

是否可以仅针对单个流程调用更改语言设置?

在Linux中我会做LANG=C myprocess

我需要使用java keytool,但输出是德语并包含变音符号,后来解析非常糟糕。可以改成英语吗?

程序如下:

from subprocess import call, Popen, PIPE

keytool_path = "C:\\Program Files\\Java\\jdk1.7.0_13\\bin\\keytool.exe"
p = Popen([keytool_path, "-printcert", "-file", "CERT.RSA"], stdout=PIPE, stderr=PIPE)
out, err = p.communicate()
o = out.decode("ISO-8859-1")

2 个答案:

答案 0 :(得分:0)

这在Windows中是不可能的。 Windows使用系统范围的语言设置,因此如果某人需要在依赖于这些值的程序中使用不同的语言输出,则必须更改它们( - >更改整个系统语言)

答案 1 :(得分:0)

Windows有点棘手,因为如果可以通过SetThreadLocale API函数(或任何高级语言等效函数)更改正在运行的程序的语言环境,则使用默认语言环境创建新进程和线程。因此,无法通过设置父进程的语言环境来更改子进程的语言环境。

某些程序(大部分来自Unix或GNU世界)可能使用LANG环境变量,但Java工具却没有。

但是您可以通过设置user.language系统属性来强制JVM使用特定语言。对于简单的java程序,您可以使用java -Duser.language=en ...

对于keytool实用程序,魔术字是keytool -J-Duser.language=en

参考:How to set default language for java keytool?