如何使控制字符可见? [英] How to make control characters visible?

查看:107
本文介绍了如何使控制字符可见?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须显示带有可见控制字符的字符串,例如 \ n \t 等等。
我试过像这里的报价,我也有试图做类似的事情

I have to display string with visible control characters like \n, \t etc. I have tried quotations like here, also I have tried to do something like

Pattern pattern = Pattern.compile("\\p{Cntrl}");
Matcher matcher = pattern.matcher(str);
String controlChar = matcher.group();
String replace = "\\" + controlChar;
result = result.replace(controlChar, replace);

但我失败了

推荐答案

替代方法:使用可见字符代替转义序列。

要使控制字符可见,请使用来自Unicode的字符控制图片块,即地图 \ u0000 - \\\001001 \ u2400 - \ u241F \ u007F \ u2421

To make control characters "visible", use the characters from the Unicode Control Pictures Block, i.e. map \u0000-\u001F to \u2400-\u241F, and \u007F to \u2421.

请注意,这需要输出为Unicode,例如UTF-8,不是像ISO-8859-1那样的单字节代码页。

Note that this requires output to be Unicode, e.g. UTF-8, not a single-byte code page like ISO-8859-1.

private static String showControlChars(String input) {
    StringBuffer buf = new StringBuffer();
    Matcher m = Pattern.compile("[\u0000-\u001F\u007F]").matcher(input);
    while (m.find()) {
        char c = m.group().charAt(0);
        m.appendReplacement(buf, Character.toString(c == '\u007F' ? '\u2421' : (char) (c + 0x2400)));
        if (c == '\n') // Let's preserve newlines
            buf.append(System.lineSeparator());
    }
    return m.appendTail(buf).toString();
}

使用上述方法输出作为输入文本:

Output using method above as input text:

␉private static String showControlChars(String input) {␍␊
␉␉StringBuffer buf = new StringBuffer();␍␊
␉␉Matcher m = Pattern.compile("[\u0000-\u001F\u007F]").matcher(input);␍␊
␉␉while (m.find()) {␍␊
␉␉␉char c = m.group().charAt(0);␍␊
␉␉␉m.appendReplacement(buf, Character.toString(c == '\u007F' ? '\u2421' : (char) (c + 0x2400)));␍␊
␉␉␉if (c == '\n')␍␊
␉␉␉␉buf.append(System.lineSeparator());␍␊
␉␉}␍␊
␉␉return m.appendTail(buf).toString();␍␊
␉}␍␊

这篇关于如何使控制字符可见?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆