Print String with escape non printable characters

柔情痞子 提交于 2020-01-23 02:06:09

问题


I have this String

String x="String containning special chars  \u202C \n  \u202C  \u202C  \u202C";

How can I print out this: String containning special chars \u202C \n \u202C \u202C \u202C ?

Tried

System.out.println(x.replace("\\","\\\\"));

But that only prints String containning special chars ‬ \n ‬ ‬ ‬

Also tried

String out = org.apache.commons.lang3.StringEscapeUtils.unescapeJava(x);
System.out.println(out);

But that also doesn't help.

Any one with a suggestion or an API that I am not aware of?

UPDATE - SOLUTION

Following @lbear aproach I came up with this functions that deals most cases of escaped Strings

public static String removeUnicodeAndEscapeChars(String input) {
    StringBuilder buffer = new StringBuilder(input.length());
    for (int i = 0; i < input.length(); i++) {
        if ((int) input.charAt(i) > 256) {
            buffer.append("\\u").append(Integer.toHexString((int) input.charAt(i)));
        } else {
            if (input.charAt(i) == '\n') {
                buffer.append("\\n");
            } else if(input.charAt(i) == '\t'){
                buffer.append("\\t");
            }else if(input.charAt(i) == '\r'){
                buffer.append("\\r");
            }else if(input.charAt(i) == '\b'){
                buffer.append("\\b");
            }else if(input.charAt(i) == '\f'){
                buffer.append("\\f");
            }else if(input.charAt(i) == '\''){
                buffer.append("\\'");
            }else if(input.charAt(i) == '\"'){
                buffer.append("\\");
            }else if(input.charAt(i) == '\\'){
                buffer.append("\\\\");
            }else {
                buffer.append(input.charAt(i));
            }
        }
    }
    return buffer.toString();
}

回答1:


Use Integer.toHexString((int)x.charAt(34));, you can get the string of the unicode char, and add \\u before it, you will get the String.

public static String removeUnicode(String input){
    StringBuffer buffer = new StringBuffer(input.length());
    for (int i =0; i < input.length(); i++){
        if ((int)input.charAt(i) > 256){
        buffer.append("\\u").append(Integer.toHexString((int)input.charAt(i)));
        } else {
            if ( input.charAt(i) == '\n'){
                buffer.append("\\n");
            } else {
                buffer.append(input.charAt(i));
            }
        }
    }
    return buffer.toString();
}



回答2:


There is the Apache Commons StringEscapeUtils which has HTML encoding. This encoding is pretty close to what you may need

String escaped code = StringEscapeUtils.escapeHtml(rowId)

See doc




回答3:


String original = "String containning special chars  \u202C \n  \u202C  \u202C  \u202C";
String escaped = original.replace("\u202C", "\\u202C");
System.out.println(escaped);


来源:https://stackoverflow.com/questions/17103660/print-string-with-escape-non-printable-characters

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!