gpt4 book ai didi

java - 当文件从 Git 同步到 Jenkins 工作区时,字符注入(inject)到 Java 类的字符串中

转载 作者:行者123 更新时间:2023-12-01 18:51:22 28 4
gpt4 key购买 nike

我有一个 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 存储库中,并由 Jenkins 作业 pull 以运行单元测试。当文件被 pull 入 Jenkins 作业工作区时,会在字符串中的版权符号之前注入(inject)一个字符:

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 上编写的。

我很困惑为什么文件在 pull 入工作区时会被更改。

有什么建议可以检查吗?

最佳答案

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

<小时/>

没有字符注入(inject),这只是巧合,mojibake 也包含版权字符。

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

0xC2 0xA9

当该文件的读者知道将该文件解释为 UTF-8 时,字符 © 将正确显示。

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

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

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

关于java - 当文件从 Git 同步到 Jenkins 工作区时,字符注入(inject)到 Java 类的字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15824161/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com