有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Crontab更改jar执行时的字符编码

我有一个用Java编写的webcrawling软件,可以浏览任何给定的网站并收集数据。到目前为止,一切顺利。我使用JSoupAPI是为了方便,但这并不重要。我的问题在于编码

当我在服务器上运行Jar文件(使用java-jarcrawler.Jar)时,它完美地捕获了数据——包括国际重读,比如á、é等等。然而当我通过crontab计划它时,它只是把每个非基本字符都搞糟了!这里有什么问题?我真是不知所措,一个答案真的可以拯救我的皮肤

编辑-一位朋友建议我使用以下代码检查Cron上运行的区域设置:

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

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


共 (2) 个答案

  1. # 1 楼答案

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

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

    LANG=en_US.UTF-8
    
  2. # 2 楼答案

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

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

    如果将其设置为写入文件,我首先要做的是,尝试另一个终端仿真器,以确保文本没有被非unicode仿真器篡改。如果这不是问题所在,您可能需要仔细检查文件本身的字符编码,并确保软件没有隐藏的问题

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

    我在乱码文本方面也遇到过类似的问题,几乎总是归结为终端模拟器的问题