Crontab在jar执行时更改字符编码

时间:2012-06-23 19:56:39

标签: java character-encoding jsoup crontab

我有一个用Java编写的网络浏览软件,它通过任何给定的网站,并收集数据。到现在为止还挺好。我使用JSoup API轻松,但这是无关紧要的。我的问题在于编码。

当我在服务器上运行Jar文件时(使用java -jar Crawler.jar),它可以完美地捕获数据 - 包括国际重音,如á,é等,等等。但是......当我通过crontab计划它时,它只会搞砸每个非基本角色!这可能是什么问题?我真的很茫然,答案真的会拯救我的皮肤。

编辑 - 一位朋友建议我使用以下代码检查在Cron上运行的语言环境:

    */1 * * * * locale > /home/user/locale.ouput

我做了,似乎crontab使用的是POSIX语言环境,而不是系统设置,即UTF-8。我将看看如何将其更改为UTF-8。任何提示将不胜感激!

2 个答案:

答案 0 :(得分:7)

每次将字节转换为字符或从字符转换字节时,都会显式设置字符编码。例如,在String构造函数中,String.getBytes(),InputStreamReader构造函数等。

如果这还不够,请尝试在启动Java之前将LANG环境变量设置为crontab中的其他值。例如,您可以使用

LANG=en_US.UTF-8

答案 1 :(得分:0)

好的,所以我假设你在生产服务器上测试这个,你正在使用ssh或者类似的远程运行它,并且正在终端模拟器上查看结果。

Java显然是unicode所以这听起来像unicode-ascii问题。如果服务器将这些文件写入文本文件,则可能是输出编码与终端上的呈现方式之间存在某种差异。

如果你将它设置为写入文件,我首先要做的是尝试使用不同的终端模拟器,以确保非unicode模拟器不会出现文本乱码。如果这不是问题,您可能需要仔细检查文件本身的字符编码,并确保软件没有某种隐藏的问题。

理想情况下,您只需在物理服务器上打开一个tty并以这种方式查看输出和字符编码,但这并不总是方便或可能。

我遇到了类似的乱码问题,它几乎总是归结为终端模拟器的问题。