2

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

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

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

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

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

4

2 回答 2

8

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

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

LANG=en_US.UTF-8
于 2012-06-23T20:31:45.737 回答
0

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

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

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

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

我遇到过类似的乱码文本问题,而且几乎总是归结为终端模拟器的问题。

于 2012-06-23T20:19:31.787 回答