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

时间:2011-06-16 12:55:36

标签: java google-app-engine utf-8

我正在尝试使用Google App Engine网络应用程序将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 });

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

注意:通过unicode转义编码字符有效 - 就像这样:

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

您确定在获取Writer之前已在HttpServletResponse中设置了内容编码吗?