我有一个包含多个源文件的Eclipse项目,其中包含一系列不同的编码:一些文件是UTF8
,其他文件是ISO-8859-1
,其他文件是windows-1252
。
此外,有些文件的编码是显式的(可以在每个文件 Properties 窗口中看到),而其他文件的文件是从容器继承。
我需要将它们转换为UTF8 - 而且我已经发现我可以使用iconv了解详细信息 - 请参阅my answer here,但由于它们超过一千,我无法转换它们一个接一个:是否有任何编程方式从IDE或类似的东西获取编码?
我在Windows上,我可能会做一些shell脚本和/或编写辅助软件。
答案 0 :(得分:0)
项目文件的字符集设置可以在${PROJECT_FOLDER}/.settings/org.eclipse.core.resources.prefs
中找到
由于项目中有这么多文件。创建一个简单的Eclipse插件可以减少工作量。以下是步骤:
Hello, World
模板。SampleAction.java
,请参阅下面的示例代码.. public void run(IAction action)
。Eclipse资源API的示例代码:
//import org.eclipse.core.resources.*;
//import org.eclipse.core.runtime.*;
public void run(IAction action) {
final boolean keepHistory = true;
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("yourProjectName");
project.accept(new IResourceVisitor() {
public boolean visit(IResource resource) {
IFile file = (IFile)resource;
try {
String charset = file.getCharset(true);
if (!"UTF-8".equals(charset)) {
InputStream is = file.getContents();
//convert to UTF-8 and save it
String str = new String(IOUtils.toByteArray(is), charset);
file.setContents(new ByteArrayInputStream(str.getBytes("UTF-8")), true, keepHistory, null);
//remove charset setting
file.setCharset("UTF-8", null);
}
} catch (Throwable e) {
//log error... maybe process later via project.getFile(new Path(projectRelativePath))
Activator.getDefault().getLog().log(new Status(IStatus.INFO, Activator.PLUGIN_ID,
file.getProjectRelativePath().toString(), e));
}
return false;
}
}, IResource.DEPTH_INFINITE, IResource.FILE);
}