改变想法intellij中的编码不起作用

时间:2017-02-25 01:30:13

标签: java intellij-idea encoding notepad++

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

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

为什么会这样?为什么Notepad ++能够转换文件,而想法不是?

2 个答案:

答案 0 :(得分:3)

我不确定,但有可能当你第一次打开文件时它被读作UTF-8而无效的字节序列被转换为robust-pca code,那么当你尝试转换为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,带有分音符的拉丁文小写字母,或者作为两个代码点,U + 0065和U + 0308,拉丁文小写字母e 组合与结合分离。但U + 00EB将以UTF-8编码为双字节序列C3 AB,而对于U + 0065 U + 0308,“e”将编码为其自身,{{1} },而U + 0308将被编码为65 CC

因此,UTF-8中的“ë”必须是88 C3AB 65 CC。它不能是88

答案 1 :(得分:2)

我相信IDEA中存在一些错误(默认编码为UTF-8),当您转换包含有效ISO-8859-1编码字符的文件并将文件编码更改为ISO-8859-1时,它搞砸了。它弄乱的特定代码点是ë。出于某种原因,它将其替换为\ufffd,而其正确的代码点为\u00eb。这是在编辑器中显示为 的字符。

我的建议是只使用UTF-8而不是将其更改为ISO-8859-1。 UTF-8向后兼容ISO-8859-1,您可以使用操作系统上的IME(似乎是Windows)编写此字符串。我不确定如何在Windows上执行此操作,但在Mac上,我使用的是U +键盘 enter image description here

然后在保持按下ALT键的同时将此字符添加为00eb。然后它显示正确:

enter image description here