Intellij IDEA: “UTF-8编码无法映射字符”编译ISO-8859-1文件

21

我有一个混合编码的源代码树,并且我的一些源文件出现了上述警告。我成功地将这些文件的编码设置为ISO 8859-1,并在使IDEA的缓存失效后,它们现在在编辑器中正确显示。然而,在编译时,我仍然收到错误消息。

生产构建使用ant,在那里不是问题,但这意味着我不能在IDE中进行“make”。有没有办法让IDEA正确编译这些文件,或者降低错误到警告级别?


我对 IDEA 没有任何了解,但是为什么你需要一个混合编码的源代码树呢?将所有文件转换成 UTF-8 不是更方便吗? - Paŭlo Ebermann
涉及到正则表达式匹配外语数据的文件需要使用已知编码。在与所匹配的编码相同的编码中编写正则表达式更容易且错误更少...至少我是这样认为的。(我对这个代码库还不熟悉。) - David Moles
1
当字符串在内存中时,它们无论如何都是UTF-16编码的,与文件所使用的编码无关(假设您已正确编译它们)。因此,虽然我可以理解为什么这些文件是以这些编码创建的,但没有任何理由反对现在将它们转换。 (当然,您也可以尝试修复IDEA的错误。) - Paŭlo Ebermann
6个回答

38

我在IntelliJ选项面板编译器/Java编译器中添加了这个属性来解决这个问题:

附加命令行参数-encoding ISO-8859-1


4

我在encoding.xml中使用了UTF-8编码,但仍然无法正常工作。一直出现错误“Error: java: error: unmappable character (0xFE) for encoding UTF-8”。

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8">
    <file url="file://$PROJECT_DIR$" charset="UTF-8" />
    <file url="PROJECT" charset="UTF-8" />
  </component>
</project>

3

如果您使用的是Intellij, 最快的方法是:

文件 -> 文件属性 -> 文件编码

然后选择您想要的编码方式,比如这个例子中的 ISO-8859-1


3

我有一个单模块项目,所以如果那个错误报告准确无误,我认为我正在寻找不同的东西。 - David Moles
您可以提交一个单独的问题,并附上一个示例项目,以便我们进行调查。 - CrazyCoder
看起来像是一个 bug。我们的项目是 UTF-8,相关文件也是 UTF-8(通过 Notepad++ 检查过),但是 Intellij 报错 Cp1252。这绝对是一个 bug。 - Henrique de Sousa
1
@HenriquedeSousa 请在 https://youtrack.jetbrains.com/newIssue?project=IDEA 上报告一个可以复现问题的样例项目。 - CrazyCoder
一旦我清除缓存并构建整个项目,这个错误就消失了。哦,好吧,抱歉 :) - Henrique de Sousa

0
在Java编译器中将"Javac"更改为"Eclipse"
我遇到了相同的错误信息,并尝试了上述方法,但对我来说效果不佳。
但是我在编译器中更改了设置。在面板"使用编译器"中,点击并选择Eclipse。
完成。

0

在IntelliJ 2019.3中测试的解决方案

打开有问题的文件。转到文件 -> 文件编码。(您还可以在右下角找到快速选项)选择您想要的编码。在我的情况下,它是UTF-8。当它提示您是否要将文件转换为新编码并覆盖内容时,单击“转换”。

尝试编译。您应该能够成功编译。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接