我有一个带有字符串 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
AB
或 65
CC
88
。它不能是 EB
。
关于java - 在 idea intellij 中更改编码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42450900/