java - IntelliJ 13 Ult。随机更改编码

标签 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. 然后当文件在 git 中被标记为已更改时,我将其还原
  4. 只有这样编码才会恢复正常

我的 IntelliJ 版本:
enter image description here

我的问题是: 这是错误还是我做错了什么/遗漏了我应该配置的东西?

更新: 我想添加更多我认为有用的信息

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

最佳答案

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

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

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

然后我将 IDEA 文件(.idea 子目录加上 MyProject.iml 文件)提交到同一个存储库并再次克隆。这次文件都正确显示了。所以这是我建议的解决方法。希望它适用于您项目中的所有 IDEA 用户。我不知道如果例如会发生什么Eclipse 用户向存储库添加了一个新文件,当您下次拉取/获取时,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 上如果你喜欢玩。

关于java - IntelliJ 13 Ult。随机更改编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23778015/

相关文章:

java - Android水平 ScrollView

java - 为单个操作单元调用两个服务方法的事务管理

java - 如何使用intellij进行远程调试?

java - 无法在 Grails 应用程序中加载 OracleDriver

java - Intellij IDEA 编辑器中的光标导航滞后

java - Flink JobExecutionException : akka. client.timeout

java - 如何在jdeveloper中创建ear文件

java - Android开发环境难点

java - SpringBoot - 制作 jar 文件 - 在 META-INF/spring.factories 中找不到自动配置类

java - 使用 Java 使用 XSLT 将 XML 转换为 CSV 时无法嵌入分隔符