I was looking for a code snippet that does that for me but couldn’t find one, especially since native2ascii seems to skip a few characters I need to show. If you’re in a similar situation, feel free to use this:
package at.soher.unicode;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.text.FieldPosition;
public class StringEscape {
public static void main(String[] args) {
File file = new File("~/file.txt");
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(
new FileInputStream(file), "UTF-16"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
String line = null;
while ((line = reader.readLine()) != null) {
String[] fields = line.split("[\t]");
if (fields.length > 1) {
StringBuilder newLine = new StringBuilder();
newLine.append(fields[0] + " = ");
String input = fields[2];
StringBuilder dest = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) > 127) {
dest.append("\\u" + asHex((long) input.charAt(i)));
} else {
dest.append(input.charAt(i));
}
}
newLine.append(dest);
System.out.println(newLine.toString());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static String asHex(long number) {
String hexString = "0000" + Long.toHexString(number).toUpperCase();
return hexString.substring(hexString.length() - 4);
}
}