簡體   English   中英

打印帶有轉義不可打印字符的字符串

[英]Print String with escape non printable characters

我有這個字符串

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

如何打印出來: String containning special chars \‬ \\n \‬ \‬ \‬

試着

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

但是只打印包含String containning special chars ‬ \\n ‬ ‬ ‬

也試過了

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

但這也無濟於事。

有沒有我不知道的建議或API的人?

更新 - 解決方案

在@lbear aproach之后,我想出了這個函數來處理大多數轉義字符串的情況

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();
}

使用Integer.toHexString((int)x.charAt(34)); ,你可以獲取unicode char的字符串,並在它之前添加\\\\u\u003c/code> ,你將得到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();
}

Apache Commons StringEscapeUtils具有HTML編碼。 此編碼非常接近您可能需要的

String escaped code = StringEscapeUtils.escapeHtml(rowId)

見文檔

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM