CRON 正在改变编码?

CRON 正在改变编码?

我有一个输出 SQL 脚本的旧 Java 程序。然后我使用 Apache Derby 在目标数据库(与 CRON 不在同一台服务器上)上运行该 SQL。

通过 putty 运行时,此程序运行正常。在 Windows 中运行时,此程序运行正常。使用 CRON 运行时,Derby 将 £ 符号读取为 ?。

如果我查看生成的 SQL 脚本(使用 VI),它包含 £ 符号。但是,如果我检查数据库,它包含 ?。

为什么在 CRON 下运行这个程序会导致程序的行为有所不同?

答案1

看来问题出在 CRON 上。当 Java 程序运行并将结果输出到文件时,它无法正确写入。我读取的 SQL 文件指向了错误的版本。

为了解决这个问题,我在 CRON 脚本顶部附近添加了以下代码

export LANG = en_US.UTF-8

这确保了 £ 符号的格式正确。

答案2

对我来说,提到的解决方案不起作用。我读到的另一个解决方案是设置

“/etc/environment”文件中的“LANG=en_US.UTF-8”。

但也没有起作用。

对我来说有用的是使用以下命令打开 crontab 文件

crontab -e

并在开始时设置:

LANG=de_DE.UTF-8
LANGUAGE=de
LC_CTYPE=de_DE.UTF-8
PYTHONIOENCODING=utf8

这也设置了环境变量。

必须对每个要运行这些变量的用户执行此操作。对于 root,请在进入 crontab 之前运行“sudo -s”。

相关内容