用控制字符的Unicode符号替换ASCII控制字符

时间:2016-08-10 23:31:46

标签: java android unicode character-encoding

我正在寻找一种快速简便的方法,用适当的unicode符号替换Ascii控制字符,以便记录这些字符。

示例:

  • ASCII→所需输出
  • 0x00→␀(U + 2400)
  • 0x01→␁(U + 2401)
  • 0x02→␂(U + 2402)
  • 0x1F→␟(U + 241F)

我的输入是一个已知长度的字节数组。我目前使用new String(byData, 0, nLength, StandardCharsets.US_ASCII).replaceAll("\\W", "�");,但这正在删除回车(␍)等有用信息。

我知道我可以手动对32个控制字符中的每一个进行查找和替换,但我认为必须有更好更快的方法。

我的项目安装了番石榴,所以如果有一些番石榴魔法,请告诉我。

我使用的是Java 7 / Android。

1 个答案:

答案 0 :(得分:1)

手动循环可能是您最好的选择:

String s = new String(byData, 0, nLength, StandardCharsets.US_ASCII);
StringBuilder sb = new StringBuilder(s);

for (int i = 0; i < sb.length(); i++) {
    int ch = (int) sb.charAt(i);
    if ((cp < 32) && (ch != 9) && (ch != 10) && (ch != 13)) {
        sb.setCharAt(i, (char)(0x2400 + ch));
    }
}

s = sb.toString();