它们被称为“Res_SChinese.java”和“Res_TChinese.java”
我假设这些必须是 Java 类文件,尽管我很惊讶它们采用不同的编码。
具有多种编码的源文件是非常不可取的。如果您不知道源文件有哪些字符集,可以使用ICU 项目库来帮助您猜测:
public static void main(String[] args) throws IOException {
InputStream file = new FileInputStream(args[0]);
try {
file = new BufferedInputStream(file);
CharsetDetector detector = new CharsetDetector();
detector.setText(file);
String tableTemplate = "%10s %10s %8s%n";
System.out.format(tableTemplate, "CONFIDENCE",
"CHARSET", "LANGUAGE");
for (CharsetMatch match : detector.detectAll()) {
System.out.format(tableTemplate, match
.getConfidence(), match.getName(), match
.getLanguage());
}
} finally {
file.close();
}
}
请注意,它可以检测到的汉字编码数量是有限的(ISO-2022-CN、GB18030 和 Big5),但至少它可以帮助您找出所有内容是否只是以 Unicode 转换格式或其他格式编码。
Eclipse(JBuilder 现在是基于 Eclipse 的,不是吗?)可以为单个文件设置编码。您可以通过右键单击文件并选择“属性”来设置 Eclipse 用于文件的编码。编码位于资源属性下。这很难管理,并且不适用于您使用的任何外部工具(如 Ant 构建脚本)。
可以使用外部使用不同的编码来编译文件。例如:
javac -encoding GB18030 Foo.java
但是,如果这些类具有相互依赖关系,那将很快变得痛苦。
面对多种编码,我会将所有文件转换为一种编码。这里有几个选项。
使用 Latin-1 子集
Java 在源文件中支持 Unicode 转义序列。因此,Unicode 字符 U+6874 桴可以写成文字 \u6874。JDK 工具native2ascii可用于将 Java 文件转换为 Latin-1 值。
native2ascii -encoding GB2312 FooIn.java FooOut.java
生成的文件可能会毫无问题地在任何地方编译,但对于任何阅读/编辑文件的人来说可能是一场噩梦。
使用GB18030
GB18030是一个巨大的字符集,所以如果这是您的本机编码,那么使用它可能是一个好主意(否则,如果我走这条路,我会使用 UTF-8)。
您可以使用这样的代码来执行转换:
public static void main(String[] args) throws IOException {
changeEncoding("in_cn.txt", Charset.forName("GBK"),
"out_cn.txt", Charset.forName("GB18030"));
}
private static void changeEncoding(String inFile,
Charset inCharset, String outFile, Charset outCharset)
throws IOException {
InputStream in = new FileInputStream(inFile);
Reader reader = new InputStreamReader(in, inCharset);
OutputStream out = new FileOutputStream(outFile);
Writer writer = new OutputStreamWriter(out, outCharset);
copy(reader, writer);
writer.close();
reader.close();
// TODO: try/finally blocks; proper stream handling
}
private static void copy(Reader reader, Writer writer)
throws IOException {
char[] cbuf = new char[1024];
while (true) {
int r = reader.read(cbuf);
if (r < 0) { break; }
writer.write(cbuf, 0, r);
}
}
如果我在记事本中打开它们,即使将语言环境设置为中文(中国),我也可以正确查看它们
记事本使用启发式字符编码检测机制。它并不总是有效。