代码之家  ›  专栏  ›  技术社区  ›  Matt

Java:多平台字符串编码问题

  •  2
  • Matt  · 技术社区  · 14 年前

    我有一个奇怪的情况,我还不知道如何处理。我们有开发人员在多个平台上工作,主要平台是linux,但我们也有人在操作系统X和Windows上工作。

    我们有一组在Linux上构建和运行良好的测试。但是当我们试图在OSX上运行它们时,它们失败了。失败的断言是测试两个字符串是否相等,但在Mac环境中有一个字符似乎不是同一个字符。我相当肯定这只是因为文件是以某种方式编码的,而预期的字符串值(硬编码)是以不同的方式编码的。我可以通过MAVEN-OPTS设置JVM file.encoding来解决其他一些编码问题,但到目前为止,这个问题一直困扰着我。

    some.xml-->xslt-->对象 assertEquals(“期望值”,object.valueToTest());

    xml文件的头表示它是用UTF-8编码的,但是在文件系统上可能会有不同的编码。有没有办法让我检查实际的编码是什么?

    4 回复  |  直到 14 年前
        1
  •  1
  •   Community    7 年前

    主要是, what Pete Kirkham said .

    file.encoding 通过MAVEN-OPTS

    不要这样做; it is not supported and may have unintended side-effects

    specify source file encoding 在pom.xml文件中。

    <project>
      ...
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
      ...
    </project>
    

    这确保编译器将在所有平台上一致地对源文件进行解码,相当于使用 javac -encoding X ...

    有关在源文件中编码的详细信息 here .

        2
  •  1
  •   Pete Kirkham    14 年前

    通常发生这种情况的原因是,如果有人使用旧字符串-字节转换,而不使用参数来指定编码。

    这不是不可能的,因为这是源文件中的编码问题,虽然我只在Windows和Linux之间移动过,所以我从未见过它,但是对于U00007f以上的任何代码点,都应该使用Unicode转义。

        3
  •  1
  •   mpontillo    14 年前

    文件中的字符是如何表示的?您可以尝试使用 \uXXXX notation

    This page 也提供了另一个线索,为什么这可能不起作用。Mac上的默认编码是“MacRoman”,它不是UTF-8的子集。因此,正如你所怀疑的,这个角色可能会被不同的解读。

        4
  •  1
  •   Adrian Pronk    14 年前

    如果XML文件以 <?xml ... encoding="UTF-8"?> M-x型 find-file-literally .

    编辑