Они называются "Res & # x5F; SChinese.java" и
"Res & # x5F; TChinese.java"
Я предполагаю, что это должны быть файлы классов Java, хотя я удивлен, что они находятся в разных кодировках.
Наличие исходных файлов в нескольких кодировках крайне нежелательно. Если вы не знаете, какой набор символов имеет исходный файл, вы можете использовать библиотеки ICU project , чтобы помочь вам догадаться :
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 поддерживает escape-последовательности Unicode в исходных файлах. Итак, символ Unicode U + 6874 & # x6874; можно записать как литерал \ 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);
}
}
Если я открою их в Блокноте, я смогу их правильно просмотреть, даже если для локали задано китайское (КНР)
Блокнот использует эвристический механизм обнаружения кодирования . Это не всегда работает .