我有一个用Java编写的网络浏览软件,它通过任何给定的网站,并收集数据。到现在为止还挺好。我使用JSoup API轻松,但这是无关紧要的。我的问题在于编码。
当我在服务器上运行Jar文件时(使用java -jar Crawler.jar),它可以完美地捕获数据 - 包括国际重音,如á,é等,等等。但是......当我通过crontab计划它时,它只会搞砸每个非基本角色!这可能是什么问题?我真的很茫然,答案真的会拯救我的皮肤。
编辑 - 一位朋友建议我使用以下代码检查在Cron上运行的语言环境:
*/1 * * * * locale > /home/user/locale.ouput
我做了,似乎crontab使用的是POSIX语言环境,而不是系统设置,即UTF-8。我将看看如何将其更改为UTF-8。任何提示将不胜感激!
答案 0 :(得分:7)
每次将字节转换为字符或从字符转换字节时,都会显式设置字符编码。例如,在String构造函数中,String.getBytes(),InputStreamReader构造函数等。
如果这还不够,请尝试在启动Java之前将LANG环境变量设置为crontab中的其他值。例如,您可以使用
LANG=en_US.UTF-8
答案 1 :(得分:0)
好的,所以我假设你在生产服务器上测试这个,你正在使用ssh或者类似的远程运行它,并且正在终端模拟器上查看结果。
Java显然是unicode所以这听起来像unicode-ascii问题。如果服务器将这些文件写入文本文件,则可能是输出编码与终端上的呈现方式之间存在某种差异。
如果你将它设置为写入文件,我首先要做的是尝试使用不同的终端模拟器,以确保非unicode模拟器不会出现文本乱码。如果这不是问题,您可能需要仔细检查文件本身的字符编码,并确保软件没有某种隐藏的问题。
理想情况下,您只需在物理服务器上打开一个tty并以这种方式查看输出和字符编码,但这并不总是方便或可能。
我遇到了类似的乱码问题,它几乎总是归结为终端模拟器的问题。