我正在尝试使用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");
答案 0 :(得分:5)
您从GAE获得的字节使我假设带有“æøå”文字的源代码文件保存为UTF-8,但使用编译器进行编译,该编译器期望源文件编码为ISO-8859- 1,ISO-8859-15或Cp1252。
如果使用Ant或Maven构建源代码,则必须在build.xml或pom.xml中指定源文件编码。
答案 1 :(得分:1)
您确定在获取Writer之前已在HttpServletResponse中设置了内容编码吗?