Encoding 理解文件编码

Encoding 理解文件编码,encoding,utf-8,character-encoding,latin1,Encoding,Utf 8,Character Encoding,Latin1,在eclipse中,我有一个文件,其中写入了以下内容: onclick='obj1.help_open_new_window(fn1(), "/redir/url_name")' 在eclipse编辑菜单->设置编码中,我看到: 现在,我使用相同的对话框将编码更改为UTF-8,文本更改为: onclick='obj1.help_open_new_window(fn1(),�"/redir/url_name")' 我所知道的是,如果这一切没有发生,那么我的网站将运行良好。为什么会发生这种情况

在eclipse中,我有一个文件,其中写入了以下内容:

onclick='obj1.help_open_new_window(fn1(), "/redir/url_name")'
在eclipse编辑菜单->设置编码中,我看到:

现在,我使用相同的对话框将编码更改为UTF-8,文本更改为:

onclick='obj1.help_open_new_window(fn1(),�"/redir/url_name")'
我所知道的是,如果这一切没有发生,那么我的网站将运行良好。为什么会发生这种情况?我该如何防止这种情况

我确实对编码有一些了解:但我仍然不明白为什么会发生这种情况。请随意转到字节级别(文件的存储方式)来解释它


更新:我的理解是:如果文件是用
拉丁语-1编码的,那么每个字符都是一个字节,
。它应该是十六进制(32)
。现在,当我将其转换为utf-8时,它仍然保持
hex(32)
,这肯定是
。这让我相信,在拉丁语-1中,
不是
hex(32)
,而是两个字节的组合。怎么可能呢?

逗号和引号之间的字符似乎不是普通的空格,而是其他一些空格字符,可能是著名的。由于文件是用拉丁语编码的,字符以字节
\xA0
的形式存储在磁盘上,这在UTF-8中不是有效字符。这意味着,如果使用UTF-8在编辑器中重新加载文件,您将看到通用替换字符
取而代之。(无中断空间的正确UTF-8编码应为
\xC2\xA0


要解决此问题,请将不间断空间替换为正常空间(U+0020)。在此上下文中,即在程序文本中,没有理由使用不间断空格。

如果可以,用十六进制编辑器打开文件,找出此时文件中实际存储的字节。好吧,但为什么eclipse会在按空格键时插入
U+00A0
而不是
U+0020
?可能有人从使用不间断空格的网页复制并粘贴了此代码。或者可能有人无意中键入了不间断空格:例如,有些人的配置是在键入Shift+空格时插入不间断空格。这通常会导致他们编辑的文件中出现不必要的无中断空格。