django调用java时,为什么utf-8字符输出不正常?

django调用java时,为什么utf-8字符输出不正常?,java,python,linux,encoding,Java,Python,Linux,Encoding,当我使用django时,我编写了一个可以由http://myhost/XXX/testIndex调用的方法 def testIndex(request): res = os.system('java -jar test.HelloWorld' > /tmp/log) ... ... HelloWorld java如下所示: public class HelloWorld { public static void main(String[] args) th

当我使用django时,我编写了一个可以由http://myhost/XXX/testIndex调用的方法

def testIndex(request):
    res = os.system('java -jar test.HelloWorld' > /tmp/log)
    ... ...
HelloWorld java如下所示:

    public class HelloWorld {
    public static void main(String[] args) throws IOException {
        System.out.println("hello!");
        System.out.println("你好!");
}
当我访问http://myhost/XXX/testIndex时,结果是当我打开/tmp/log文件时,UTF-8字符不正确! 像这样

hello! ??!
发生了什么事?顺便说一句,我在linux centOS下

您有两个问题:

  • 您已经在Java源代码中输入了非ASCII字符。这通常不被认为是好的做法,因为您需要告诉Java编译器您对源文件使用了什么编码。如果是UTF-8,请尝试:
    javac-编码UTF-8helloworld.java

  • System.out的默认编码可能不是UTF-8。如果您说您正在使用哪个JRE,这会有所帮助,因为不同的实现可能会表现出稍有不同的行为。您可以使用
    java-Dfile.encoding=UTF-8
    显式指定编码,尽管这也是一个问题。如果是Sun或OpenJDK JRE,则需要在Java启动之前设置LANG环境变量;您可以在Web服务器配置中执行此操作,也可以使用
    子流程
    python模块,该模块允许您指定传递给新流程的环境


  • 是什么让您认为这会将UTF8字符写入文件?你没有在任何地方设置任何编码。当我使用shell时,一切都正常,我的所有环境都设置为UTF-8,我的linux语言环境,我的所有python和java文件,python文件的注释为#coding:UTF-8,我应该将编码正确地放在哪里1。我的环境变量LANG已设置为zh_CN.UTF-8 2。javac编码UTF-8没有帮助,如果我不在java源代码中输入非ASCII字符,而不是读取UTF-8编码的文件,然后打印它们,它也不工作,为什么?另一个关键点是它在shell中工作,在drango serviceOk中是错误的,所以您消除了问题1,而不是问题2。很可能在Web服务器环境中未设置LANG。