加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Heroku上的默认字符集(US-ASCII)导致问题

发布时间:2020-12-15 04:09:25 所属栏目:Java 来源:网络整理
导读:我们在heroku上部署了一个基于maven-jetty的 Java应用程序. 当地人,当我这样做时: System.out.println("Default Charset = "+ Charset.defaultCharset());String s = "Resumé of Schr?dinger";System.out.println("s = "+ s);` 我看到(如预期的那样): Def
我们在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应用程序时,我们的代码行为相同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读