Похоже, что текст, закодированный в кодировке GB18030, был интерпретирован как Latin-1, а затем символы были экранированы как ссылки на сущности HTML.
Метод unescapeHtml4()
методаStringEscapeUtils
класс из Apache Commons Text может использоваться для удаления ссылок на сущности, что демонстрирует небольшая программа ниже.
笼镜 海王预告片-01.wav
выводится на стандартный вывод.Это очень похоже на то, что вы просили.Только первый китайский символ отличается.Если Á
во входной строке изменить на Â
, то программа выведет точное требуемое имя файла (慢镜 海王预告片-01.wav
).
import java.nio.charset.Charset;
import java.io.PrintStream;
import org.apache.commons.text.StringEscapeUtils;
public class Chinese {
public static void main(String[] args) {
String fname = "Áý¾µ º£ÍõÔ¤¸æƬ-01.wav";
decode(fname);
}
static void decode(String s) {
Charset latin1 = Charset.forName("latin1");
Charset gb18030 = Charset.forName("gb18030");
Charset utf8 = Charset.forName("utf8");
String unescaped = StringEscapeUtils.unescapeHtml4(s);
byte[] latin1_bytes = unescaped.getBytes(latin1);
String text = new String(latin1_bytes, gb18030);
PrintStream ps = new PrintStream(System.out, true, utf8);
ps.println(text);
}
}