文件同步时将字符注入Java类的字符串';d从Git进入Jenkins工作区

文件同步时将字符注入Java类的字符串';d从Git进入Jenkins工作区,java,git,character-encoding,jenkins,Java,Git,Character Encoding,Jenkins,我有一个Java类,它具有以下内容: public static final blob COPYRIGHT_MARK = new Blob("div.legal_footer span", "© " + new SimpleDateFormat("yyyy").format(new Date()) + " Acme LLC. All Rights Reserved."); 带有该类的项目存储在git repo中,并由Jenkins作业拉入以运行单元测试。将文件拉入Jenkins作业工作区时,将

我有一个Java类,它具有以下内容:

public static final blob COPYRIGHT_MARK = new Blob("div.legal_footer span", "© " + new SimpleDateFormat("yyyy").format(new Date()) + " Acme LLC. All Rights Reserved.");
带有该类的项目存储在git repo中,并由Jenkins作业拉入以运行单元测试。将文件拉入Jenkins作业工作区时,将在字符串中版权符号之前插入一个字符:

public static final blob COPYRIGHT_MARK = new Blob("div.legal_footer span", "© " + new SimpleDateFormat("yyyy").format(new Date()) + " Acme LLC. All Rights Reserved.");
这会导致测试失败

java类编码为UTF-8。可以在本地构建项目并运行测试,而不会出现任何问题。Jenkins实例正在OSX上运行。代码也写在Mac电脑上

我不明白为什么文件被拉入工作区时会被修改


关于检查什么有什么建议吗?

您需要在一些配置文件/参数/环境变量中声明要使用的编码是UTF-8。将文件物理编码为UTF-8仅仅是成功的一半,文件的任何读者也需要了解这一事实


没有字符注入,只是巧合,mojibake也包含版权字符

您已将文件编码为UTF-8,因此实际上它包含以下字节:

0xC2 0xA9
当该文件的读取器知道将该文件解释为UTF-8时,字符
将正确显示

但是,如果该文件的读取器不知道用什么编码来解释该文件,则很可能会被错误地解释

在您的情况下,该文件可能被错误地解释为Windows-1252/cp1252/“ANSI”或ISO-8859-1。在这些编码中,
0xC2 0xA9
解码为
0xC2
,而所有其他字节解码为与UTF-8中相同的字符,这同样是一种巧合。如果只使用具有相同编码映射的字符,您甚至不会注意到存在问题


您需要在一些配置文件/参数/环境变量中声明要使用的编码是UTF-8。将文件物理编码为UTF-8仅仅是成功的一半,文件的任何读者也需要了解这一事实


没有字符注入,只是巧合,mojibake也包含版权字符

您已将文件编码为UTF-8,因此实际上它包含以下字节:

0xC2 0xA9
当该文件的读取器知道将该文件解释为UTF-8时,字符
将正确显示

但是,如果该文件的读取器不知道用什么编码来解释该文件,则很可能会被错误地解释

在您的情况下,该文件可能被错误地解释为Windows-1252/cp1252/“ANSI”或ISO-8859-1。在这些编码中,
0xC2 0xA9
解码为
0xC2
,而所有其他字节解码为与UTF-8中相同的字符,这同样是一种巧合。如果只使用具有相同编码映射的字符,您甚至不会注意到存在问题