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

Jak*_*kov 4 java google-app-engine utf-8

我正在尝试使用Google App Engine Web应用程序将UTF-8编码的文本发送回浏览器.我这样写,写这个:

byte[] utf8Bytes = "æøå".getBytes("UTF-8");
Run Code Online (Sandbox Code Playgroud)

当我在本地执行此操作时,我得到一个包含6个字节的字节数组.当我在Google App Engine上执行此操作时,我得到一个包含12个字节的数组.很奇怪,是吗?

有谁知道为什么?

我已经成功地从GAE编写UTF-8编码文本,通过自己编码字节,然后写回原始字节.像这样:

output.write(new byte[]{(byte)0xc3, (byte)0xa5, (byte) 0xc3, (byte)0xa6, (byte)0xc3, (byte)0xb8 });
Run Code Online (Sandbox Code Playgroud)

这实际上是有效的.但是,有没有人能够回答为什么String在GAE上的编码方式不同于本地?

注意:通过unicode转义编码字符有效 - 如下所示:

byte[] utf8Bytes = "\u00E5\u00F8\u00E6".getBytes("UTF-8");
Run Code Online (Sandbox Code Playgroud)

jar*_*bjo 5

您从GAE获得的字节使我假设带有"æøå"文字的源代码文件保存为UTF-8,但使用编译器进行编译,该编译器期望源文件编码为ISO-8859-1,ISO -8859-15或Cp1252.

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