是否可以仅针对单个流程调用更改语言设置?
在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")
答案 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