Java:本地应用程序和Google应用程序引擎之间的字符串UTF-8编码差异

Java:本地应用程序和Google应用程序引擎之间的字符串UTF-8编码差异,java,google-app-engine,utf-8,Java,Google App Engine,Utf 8,我正在尝试使用Google App Engine web应用程序将UTF-8编码的文本发送回浏览器。 我这样做,通过写下: byte[] utf8Bytes = "æøå".getBytes("UTF-8"); 当我在本地执行此操作时,我得到一个返回6个字节的字节数组。 当我在Google App Engine上执行此操作时,我得到一个返回12字节的数组。奇怪吧 有人知道为什么吗 我已经成功地从GAE编写了UTF-8编码的文本,通过自己编码字节, 并将原始字节写回。像这样: output.wr

我正在尝试使用Google App Engine web应用程序将UTF-8编码的文本发送回浏览器。 我这样做,通过写下:

byte[] utf8Bytes = "æøå".getBytes("UTF-8");
当我在本地执行此操作时,我得到一个返回6个字节的字节数组。 当我在Google App Engine上执行此操作时,我得到一个返回12字节的数组。奇怪吧

有人知道为什么吗

我已经成功地从GAE编写了UTF-8编码的文本,通过自己编码字节, 并将原始字节写回。像这样:

output.write(new byte[]{(byte)0xc3, (byte)0xa5, (byte) 0xc3, (byte)0xa6, (byte)0xc3, (byte)0xb8 });
这确实有效。但是,有人知道为什么字符串在GAE上的编码不同于本地编码吗

注意:通过unicode转义对字符进行编码——如下所示:

byte[] utf8Bytes = "\u00E5\u00F8\u00E6".getBytes("UTF-8");

您从GAE获得的字节使我假设带有“æå”文本的源代码文件保存为UTF-8,但使用编译器编译,该编译器希望源文件编码为ISO-8859-1、ISO-8859-15或Cp1252


如果您是使用Ant或Maven构建源代码,则必须在build.xml或pom.xml中指定源文件编码。

在获得编写器之前,您确定已在HttpServletResponse中设置了内容编码吗?

您从GAE中获得的12个字节是什么?GAE中获得的12个字节是(十六进制值)c3 83 c2 a6 c3 83 c2 b8 c3 83 c2 a5本地,6个字节为:c3 a6 c3 b8 c3a5@Jakob-在编译源代码的方式上有什么不同吗?看@McDowell:是的,事实上有。我会研究它,然后再回来。我最终在代码中编写了\u编码,然后它就工作了。这一定是编译器的问题——认为Java文件还不是UTF-8,因此对字符串进行了双重编码。这适用于byte[]utf8Bytes=“\u00E5\u00F8\u00E6”。getBytes(“UTF-8”);我认为你是对的。我正在使用谷歌应用程序引擎脚本/工具构建代码。我已经寻找了开关等,以改变编译器的编码,并找到了一个,但它没有改变任何东西。但是,对代码中的特殊字符使用\uxxx代码解决了问题。我将字节直接写入OutputStream,因此服务器不应干扰我的写入。此外,在我写回结果之前,问题已经出现了。我从字符串中得到12个字节,而不是6个字节。问题已经来了。啊,谢谢你澄清。那么,在eclipse、ant、maven或javac中,您的源代码编码确实是个问题。