Merge pull request #259 from hopana/utf8_character_support
add feature: Chinese characters support!
This commit is contained in:
commit
613eb7fcad
4 changed files with 111 additions and 12 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -6,4 +6,5 @@
|
||||||
.classpath
|
.classpath
|
||||||
.project
|
.project
|
||||||
.DS_Store
|
.DS_Store
|
||||||
*.iml
|
*.iml
|
||||||
|
/out/
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package me.konloch.kontainer.io;
|
package me.konloch.kontainer.io;
|
||||||
|
|
||||||
|
import the.bytecode.club.bytecodeviewer.util.EncodeUtils;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -54,20 +56,18 @@ public class DiskReader {
|
||||||
/**
|
/**
|
||||||
* Used to load from file
|
* Used to load from file
|
||||||
*/
|
*/
|
||||||
public synchronized static String loadAsString(String fileName)
|
public synchronized static String loadAsString(String fileName) throws Exception {
|
||||||
throws Exception {
|
StringBuilder s = new StringBuilder();
|
||||||
String s = "";
|
|
||||||
|
|
||||||
BufferedReader reader = new BufferedReader(new FileReader(new File(
|
BufferedReader reader = new BufferedReader(new FileReader(new File(fileName)));
|
||||||
fileName)));
|
|
||||||
String add;
|
|
||||||
|
|
||||||
while ((add = reader.readLine()) != null)
|
for (String add = reader.readLine(); add != null; add = reader.readLine()) {
|
||||||
s += add + System.getProperty("line.separator");
|
s.append(EncodeUtils.unicodeToString(add)).append(System.getProperty("line.separator"));
|
||||||
|
}
|
||||||
|
|
||||||
reader.close();
|
reader.close();
|
||||||
|
|
||||||
return s;
|
return s.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -35,6 +35,7 @@ import com.strobel.assembler.metadata.TypeDefinition;
|
||||||
import com.strobel.assembler.metadata.TypeReference;
|
import com.strobel.assembler.metadata.TypeReference;
|
||||||
|
|
||||||
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
import the.bytecode.club.bytecodeviewer.BytecodeViewer;
|
||||||
|
import the.bytecode.club.bytecodeviewer.util.EncodeUtils;
|
||||||
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
import the.bytecode.club.bytecodeviewer.util.MiscUtils;
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
@ -134,9 +135,8 @@ public class ProcyonDecompiler extends Decompiler {
|
||||||
}
|
}
|
||||||
StringWriter stringwriter = new StringWriter();
|
StringWriter stringwriter = new StringWriter();
|
||||||
settings.getLanguage().decompileType(resolvedType, new PlainTextOutput(stringwriter), decompilationOptions);
|
settings.getLanguage().decompileType(resolvedType, new PlainTextOutput(stringwriter), decompilationOptions);
|
||||||
String decompiledSource = stringwriter.toString();
|
|
||||||
|
|
||||||
return decompiledSource;
|
return EncodeUtils.unicodeToString(stringwriter.toString());
|
||||||
} catch (StackOverflowError | Exception e) {
|
} catch (StackOverflowError | Exception e) {
|
||||||
StringWriter sw = new StringWriter();
|
StringWriter sw = new StringWriter();
|
||||||
e.printStackTrace(new PrintWriter(sw));
|
e.printStackTrace(new PrintWriter(sw));
|
||||||
|
|
98
src/the/bytecode/club/bytecodeviewer/util/EncodeUtils.java
Normal file
98
src/the/bytecode/club/bytecodeviewer/util/EncodeUtils.java
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
package the.bytecode.club.bytecodeviewer.util;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encoding Convert Utils
|
||||||
|
*
|
||||||
|
* @author hupan
|
||||||
|
* @date 2019-11-19 14:29
|
||||||
|
*/
|
||||||
|
public class EncodeUtils {
|
||||||
|
|
||||||
|
public static String stringToUnicode(String s) {
|
||||||
|
try {
|
||||||
|
StringBuilder out = new StringBuilder("");
|
||||||
|
byte[] bytes = s.getBytes("unicode");
|
||||||
|
|
||||||
|
for (int i = 0; i < bytes.length - 1; i += 2) {
|
||||||
|
out.append("\\u");
|
||||||
|
String str = Integer.toHexString(bytes[i + 1] & 0xff);
|
||||||
|
for (int j = str.length(); j < 2; j++) {
|
||||||
|
out.append("0");
|
||||||
|
}
|
||||||
|
String str1 = Integer.toHexString(bytes[i] & 0xff);
|
||||||
|
out.append(str1);
|
||||||
|
out.append(str);
|
||||||
|
}
|
||||||
|
return out.toString();
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String unicodeToString(String str) {
|
||||||
|
|
||||||
|
Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");
|
||||||
|
Matcher matcher = pattern.matcher(str);
|
||||||
|
char ch;
|
||||||
|
while (matcher.find()) {
|
||||||
|
String group = matcher.group(2);
|
||||||
|
ch = (char) Integer.parseInt(group, 16);
|
||||||
|
String group1 = matcher.group(1);
|
||||||
|
str = str.replace(group1, ch + "");
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String convertStringToUTF8(String s) {
|
||||||
|
if (s == null || StringUtils.EMPTY.equals(s)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
try {
|
||||||
|
char c;
|
||||||
|
for (int i = 0; i < s.length(); i++) {
|
||||||
|
c = s.charAt(i);
|
||||||
|
if (c >= 0 && c <= 255) {
|
||||||
|
sb.append(c);
|
||||||
|
} else {
|
||||||
|
byte[] b;
|
||||||
|
b = Character.toString(c).getBytes(StandardCharsets.UTF_8);
|
||||||
|
for (int value : b) {
|
||||||
|
int k = value;
|
||||||
|
k = k < 0 ? k + 256 : k;
|
||||||
|
sb.append(Integer.toHexString(k).toUpperCase());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String convertUTF8ToString(String s) {
|
||||||
|
if (s == null || StringUtils.EMPTY.equals(s)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
s = s.toUpperCase();
|
||||||
|
int total = s.length() / 2;
|
||||||
|
int pos = 0;
|
||||||
|
byte[] buffer = new byte[total];
|
||||||
|
for (int i = 0; i < total; i++) {
|
||||||
|
int start = i * 2;
|
||||||
|
buffer[i] = (byte) Integer.parseInt(s.substring(start, start + 2), 16);
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new String(buffer, 0, pos, StandardCharsets.UTF_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue