fri*_*itz 3 java base64 heroku utf-8 character-encoding
我们在heroku上部署了一个基于maven-jetty的Java应用程序.
当地人,当我这样做时:
System.out.println("Default Charset = "+ Charset.defaultCharset());
String s = "Resumé of Schrödinger";
System.out.println("s = "+ s);`
Run Code Online (Sandbox Code Playgroud)
我看到(如预期的那样):
Default Charset = UTF-8
s = Resumé of Schrödinger
Run Code Online (Sandbox Code Playgroud)
但是,当我将应用程序推送到heroku并检查日志时,我看到:
Default Charset = US-ASCII
s = Resum?? of Schr??dinger
Run Code Online (Sandbox Code Playgroud)
实际上,由于我们必须解码具有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");
Run Code Online (Sandbox Code Playgroud)
后来,org.apache.commons.codec.binary.Base64.decodeBase64(byte [])我做的时候甚至都在做stringObject.getBytes("UTF-8")
但是,我仍然无法看到像e-acute(é),umlaut(ö)等字符.
有没有办法在Heroku上解决这个问题?
pom.xml中的jdk版本是1.6
这是OpenJDK 1.7和Heroku下面的虚拟机的怪癖吗?
提前致谢.
最后,我与Heroku友好的工作人员取得了联系 - 他们file.encoding通过JAVA_OPTSenv变量给出了以下建议来覆盖房产.
从我的Heroku Toolbelt发出以下内容,现在开始工作了.
heroku config:add JAVA_OPTS='-Xmx384m -Xss512k -XX:+UseCompressedOops -Dfile.encoding=UTF-8'
Run Code Online (Sandbox Code Playgroud)
通过这种方式,JVM可以选择它,然后Charset.defaultCharset( )返回UTF-8,特殊字符应该出现!
他们还说,我们也可以做以下事情:
heroku config:add JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF-8'
Run Code Online (Sandbox Code Playgroud)
此外,将此属性直接嵌入到应用程序的Procfile中是个好主意,这样当我们将它推送到新的Heroku应用程序时,我们的代码行为相同.
| 归档时间: |
|
| 查看次数: |
2453 次 |
| 最近记录: |