[说明:]在eclipse工作区环境下,一个文件的编码最终确定遵循如下规则(优先级从高到底):
1.文件本身的物理设置(第一优先级), 通常是有如下途径:
a. 文件输出时writer编码的设定.
b.用户通过文件属性页的自定义编码设置
c.文件内容本身属性的设置,例如jsp资源文件,文件内容中的charset属性的值(配合对应编辑器完成,但是对于含BOM的文件例外)
2.content-type文件内容类型扩展注册时候提供的默认编码(第二优先级)
更详细信息可以参见org.eclipse.core.runtime.contentTypes扩展点声明信息
说明:关于content-type对应的默认编码信息可以通过 Windlow->Preferences->General->Editors->File Associations->Content Types进行设定
3.工作区默认编码设置(第三优先级)
更详细信息可以参见file.encoding参数说明
通过上面的规则说明,我们可以看出来,决定一个文件在eclipse工作区中的编码可以在不同的层面采取相应的措施:
以创建一个新的文件为场景,我们可以采取的方式如下:
writer编码的明确设定
文件内容的设定(例如上面提到的jsp文件中的charset属性)
修改特定文件类型对应的org.eclipse.core.runtime.contentTypes扩展注册的默认编码
编程的方式操作content-type对应的perference值
设置工作区的file.encoding
特别说明:
关于writer默认使用的charset和file.encoding设置的关系,请参加另外一篇豆腐块文章
后记:
上面的内容写的比较粗粒度,而且没有附相应的示例代码等等, 看起来可能会别扭一点.
关于文件编码的这种问题,和处理类加载问题等都很相似,只要是一次把底层的机制搞个大概了,以后再遇到就会很快的定位和发现问题.