java - AWS Elastic Beanstalk 环境变量编码和字符集

标签 java amazon-web-services amazon-elastic-beanstalk

我有一个简单的 Java Web 应用程序作为独立的 JAR 文件部署在 AWS Elastic Beanstalk 上。它从环境变量中提取值以将它们作为 HTML 显示在网页中。稍微简化一下应用程序,如果我分配环境变量 PAGE_TEST = "foo\nbar",那么当我转到页面 /test 时,我将看到以下内容,因为我的应用程序将行解析为段落

…
<p>foo</p>
<p>bar</p>
…

编码问题

第一个问题是在Elastic Beanstalk中,设置环境变量PAGE_TESTfoo\nbar是行不通的!在测试页面上,我得到了这个:

…
<p>foonbar</p>
…

显然 AWS Elastic Beanstalk 正在尝试解释我的反斜杠字符。为什么?我怎样才能关闭它?我希望它只使用我给它的确切值!谁告诉它尝试将值评估为转义码?

我可以通过将反斜杠转义为 foo\\nbar 来解决这个问题,但我不应该这样做!

字符集问题

但是现在有一个更严重的问题。我将环境变量 PAGE_TEST 设置为 dança,这是一个完全合法的 Unicode 字符串——葡萄牙语中“舞蹈”的意思。不幸的是,Elastic Beanstalk 将 dan?a 传递给我的应用程序。

…
<p>dan?a</p>
…

根据经验,我可能会猜测 Elastic Beanstalk 正在尝试将值解释为 ASCII,并且它正在使用一个字符集解码器,该解码器只是将任何非 ASCII 字符替换为 ?。或者其他的东西。它为什么要这样做?现在是 2020 年了——只使用 Unicode 有什么问题?

有人可以帮我告诉 AWS Elastic Beanstalk 停止乱用我完全有效的环境变量并在我提供它们时简单地接受它们吗?我将不胜感激。

最佳答案

我找到了一些 Elastic Beanstalk configuration documentation说环境变量只能使用字符 _ 的值。 :/= +\- @ ' "。哎呀!在验证设置期间它甚至没有提醒我这个问题,而是用 ?< 愉快地替换了它不喜欢的字符.

我仍然不知道为什么它将 \ 字符视为转义字符并将其删除。

无论如何,这完全破坏了在本地正常运行的应用程序。看来我必须重新设计功能。也许我只需要将我想要的字符串的 UTF-8 字节编码为环境变量值。不过,这似乎毫无必要。

关于java - AWS Elastic Beanstalk 环境变量编码和字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64519029/

相关文章:

java - SWT - 获取当前日期并附加到字符串中

amazon-web-services - 通过 CloudFormation 部署 AWS UserPool 并更新属性

c# - 如何在 Linux 环境中将 .NET (C#) 程序发布到 AWS BeanStalk?

amazon-web-services - 将大文件从 AWS S3 迁移到 Azure Blob 存储。在 Java 中迁移时还需要监控进度

deployment - 启动 Elastic Beanstalk 环境时出错

azure - Paas 环境中的服务堆栈

java - 通过 JMS/JNDI 连接到 WebSphere MQ 时出现 SSLHandshakeException

java - Selenium webdriver : Modifying navigator. webdriver 标志以防止 Selenium 检测

java - Logback 不创建输出日志文件

node.js - 如何从 AWS RDS 连接到没有 "database"名称的 PostgreSQL 数据库