java - 在 idea intellij 中更改编码不起作用

标签 java intellij-idea encoding notepad++

我有一个带有字符串 String s="P�rsh�ndetje bot�!"; 的 .java 文件。

当我在 Notepad++ 中打开此文件并将编码更改为 ISO-8859-1 时,它会显示相应的字符串:"Përshëndetje botë!",但如果我打开文件在 idea intellij 中并将编码更改为 ISO-8859-1,它警告我某些符号无法转换,然后将这些符号替换为 ? mark: "P?rsh ?ndetje 机器人?!”

为什么会这样?为什么Notepad++可以转换文件,而idea不能?

最佳答案

我不确定,但有可能当您第一次打开文件时,它被读取为 UTF-8,并且无效的字节序列变成了 Unicode replacement character ,那么当您尝试转换为 ISO-8859-1 时,它会尝试转换 Unicode 替换字符,但在 ISO-8859-1 中没有该字符的值,因此它被转换为 ?

(即使像“ërs”这样的文本可以用 Unicode 和 UTF-8 表示,“ërs”的 ISO-8859-1 编码是 EB 72 73 这是一个三字节 UTF-8 序列的起始字节,但接下来的两个字节不是连续字节,因此将其视为 UTF-8 的程序会认为这些重音字符无效。 )

我认为您需要让 IntelliJ 以 ISO-8859-1 格式打开文件,而不是先以 UTF-8 格式打开文件,然后尝试转换为 ISO-8859-1。

(当您在 Notepad++ 中切换编码时,它必须返回到文件的原始字节并将它们解释为 ISO-8859-1,而不是尝试通过将无效字节更改为替换字符。)

请注意,ë 是一个完全有效的 Unicode 字符。它可以表示为 U+00EB,带分音符的拉丁文小写字母 e,或者表示为两个代码点,U+0065 和 U+0308,拉丁文小写字母 e 组合与 结合分音符。但是 U+00EB 将在 UTF-8 中编码为双字节序列 C3 AB,对于 U+0065 U+0308,“e”将编码为本身、65 和 U+0308 将被编码为 CC 88

因此 UTF-8 中的“ë”必须是 C3 AB65 CC 88。它不能是 EB

关于java - 在 idea intellij 中更改编码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42450900/

相关文章:

java - 无法让我的方面运行

python-3.x - Intellij IDEA 导入类时出现问题, "cannot find reference"但代码仍然有效 - Python

java - 在IDEA中,如何自动删除.attach_pidxxx文件

unicode - 为什么 Unicode 代码点总是至少用 2 个字节编写?

java - java中如何将名字的第一个字母大写?

java - 是否可以在同一框架中打开新的 fxml 文件

JAVA如何求14位数值的总和?

java - 如何使用 spring boot 抑制 url 编码

java - URI 中的非法字符

java - 具有多个边界的成员类型