从Unix调用Java Jar,某些特殊字符未正确打印

时间:2018-10-11 14:04:39

标签: java unix encoding jar

我有一个unix脚本,该脚本调用Java jar并提供一些加密的文本(没有任何特殊字符)作为输入。 Java代码将其解密,然后将解密的消息发送到数据库。

但有时会使用特殊字符(à,ē)作为输入。因此它们被加密并发送到jar文件。到目前为止还不错,但是当我们打印解密后的消息时,spl字符将转换为问号。我尝试直接打印一些特殊字符。当我手动运行Unix脚本时,它们也会转换为问号。输出为垃圾字符,而不是问号或特殊字符。

当我尝试放置一些这样的日志时 LOGGER.info("áéróspåcê")正在转换为?? r?sp?c?当脚本通过crontab运行时 当我手动触发脚本时,“áéróspåcê”将转换为á©róspÃ¥cê。

2 个答案:

答案 0 :(得分:1)

显示输出由LOCALE和终端中可用的字体确定。此外,尽管Java利用UTF,但取决于如何显示此加密文本,但不能保证数据以UTF表示。

您可以在Unix提示符下尝试命令locale,尤其是LANG,甚至可能是LC_ALL

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=

使用UTF-8和终端的正确字体,它将正确显示。

但是,仍然存在将加密文本呈现给Java程序的方式的问题,这可能会导致其他问题。

然后,当您进入数据库时​​,数据库还必须支持多字节字符。

答案 1 :(得分:0)

恐怕Windows控制台不支持特殊字符,这篇帖子可能与此问题有关How to use unicode characters in Windows command line?