IntelliJ 13 Ult。随机编码变化

时间:2014-05-21 08:35:00

标签: java intellij-idea

所以我有很多模块有不同的编码(UTF-8和ISO-8859-7) 我在设置文件编码部分设置了各自的编码 我的maven建立了每个项目的编码状态。我也有这些文件在git中,我并不是唯一的这些项目,即其他人也在其中。 enter image description here

上个月会发生什么: 随机地在某些文件上编码更改为UTF-8,当我尝试将其更改回ISO-8859-7时,当我选择“重新加载”选项时,它不会发生任何变化。编码不会改变。 enter image description here 我要做的是以下步骤:

  1. 选择ISO-8859-7作为编码
  2. 按选项
  3. 中的转换
  4. 然后当文件在git中标记为已更改时我将其还原
  5. 只有这样才能使编码恢复正常
  6. 我的IntelliJ版本:
    enter image description here

    我的问题是: 这是一个错误还是我做错了什么/丢失了我应该配置的东西?

    更新: 我想添加一些我发现有用的信息

    • 每次打开IntelliJ时都会出现问题,而前一天我修复了编码的文件会出现问题。
    • (我不知道这是否相关,但它也会发生)当我 将文件转换为ISO编码编码,然后还原 文件,以便我可以看到文本,git分支变为分离
    • 此外,我是唯一一个参与此项目的人,所以没有人改变 git中提交的文件

1 个答案:

答案 0 :(得分:6)

我能够通过将带有混合文件的项目提交给没有IntelliJ IDEA项目文件的Git 来重现这一点,这是应该做的,因为人们使用不同的IDE。

然后,如果我将项目克隆到另一个目录并创建一个新的IDEA项目,编码设置是不同的,但即使我更正它们,第一次加载希腊文件IDEA认为它是UTF-8因为&# 34;自动检测UTF编码的文件"活跃。如果设置处于非活动状态,则相反:希腊语文件将正确显示,但UTF-8文件显示为希腊语。

无论出了什么问题,我都可以轻松切换编码并选择"重新加载"从弹出式对话中。

然后我将IDEA文件( .idea 子目录加 MyProject.iml 文件)提交到同一个存储库并再次克隆。这次文件都正确显示。所以这是我建议的解决方法。希望它适用于您项目中的所有IDEA用户。我不知道如果发生什么,例如Eclipse用户向repo添加一个新文件,当您下次提取/获取时,IDEA仍然不知道该文件。可能你必须再次分配正确的编码。

那么IDEA如何记住哪些文件或目录具有哪种编码?查看文件 .idea / encodings.xml

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" defaultCharsetForPropertiesFiles="ISO-8859-7">
    <file url="file://$PROJECT_DIR$/src/utf8/Unicode.java" charset="UTF-8" />
    <file url="PROJECT" charset="ISO-8859-7" />
  </component>
</project>

在那里,您可以看到我将ISO-8859-7设置为普通和属性文件的默认设置,并且UTF猜测已打开,就像屏幕截图中的情况一样。您还看到项目文件 $ PROJECT_DIR $ / src / utf8 / Unicode.java 具有UTF-8编码。您没有看到列出的是带有希腊语编码的文件,因为无论如何这都是项目默认值。

结论:如果您至少提交 .idea / encodings.xml ,则可以保留编码信息。在我看来,这在IDEA中不是错误,但这是正常的事情。如果您没有保存的项目状态,IDEA如何知道编码?编码不存储在Git或文件系统中,它是元信息。这可能就是为什么XML文件在第一行开头就提到了自己编码的原因(正如你在上面的代码片段中也可以看到的那样)。 Java文件没有这样的编码标记。因此,对于混合编码项目,您只需要小心。 ; - )

更新:如果您想玩游戏,我的测试版将在GitHub上。