java – Heroku上的默认字符集(US-ASCII)导致问题
我们在heroku上部署了一个基于maven-jetty的
Java应用程序.
当地人,当我这样做时: System.out.println("Default Charset = "+ Charset.defaultCharset()); String s = "Resumé of Schr?dinger"; System.out.println("s = "+ s);` 我看到(如预期的那样): Default Charset = UTF-8 s = Resumé of Schr?dinger 但是,当我将应用程序推送到heroku并检查日志时,我看到: Default Charset = US-ASCII s = Resum?? of Schr??dinger 实际上,由于我们必须解码具有UTF-8编码字符的Base-64编码文本,因此我面临更多问题. 我甚至试过以下没有用过: SAXBuilder builder = new SAXBuilder(); InputStream iStream = new ByteArrayInputStream(xmlAsString.getBytes("UTF-8")); Reader reader = new InputStreamReader(iStream,"UTF-8"); InputSource is = new InputSource(reader); is.setEncoding("UTF-8"); 后来,在做org.apache.commons.codec.binary.Base64.decodeBase64(byte [])时,我甚至在做stringObject.getBytes(“UTF-8”) 但是,我仍然无法看到像e-acute(é),umlaut(?)等字符. 有没有办法在Heroku上解决这个问题? pom.xml中的jdk版本是1.6 这是OpenJDK 1.7& amp; Heroku下面的虚拟机? 提前致谢. 解决方法
最后,我与Heroku的友好工作人员取得了联系 – 他们提出了以下建议,通过JAVA_OPTS env-variable覆盖file.encoding属性.
从我的Heroku Toolbelt发出以下内容,&事情现在开始奏效了. heroku config:add JAVA_OPTS='-Xmx384m -Xss512k -XX:+UseCompressedOops -Dfile.encoding=UTF-8' 通过这种方式,JVM可以选择它,&现在Charset.defaultCharset()返回UTF-8,特殊字符应该出现! 他们还说,我们也可以做以下事情: heroku config:add JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF-8' 此外,将此属性直接嵌入到应用程序的Procfile中是个好主意,这样当我们将其推送到新的Heroku应用程序时,我们的代码行为相同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |