222 buf.append(quote(s.charAt(i))); 223 } 224 return buf.toString(); 225 } 226 227 /** 228 * Escapes a character if it has an escape sequence or is 229 * non-printable ASCII. Leaves non-ASCII characters alone. 230 */ 231 public static String quote(char ch) { 232 switch (ch) { 233 case '\b': return "\\b"; 234 case '\f': return "\\f"; 235 case '\n': return "\\n"; 236 case '\r': return "\\r"; 237 case '\t': return "\\t"; 238 case '\'': return "\\'"; 239 case '\"': return "\\\""; 240 case '\\': return "\\\\"; 241 default: 242 return (ch > 127 || isPrintableAscii(ch)) 243 ? String.valueOf(ch) 244 : String.format("\\%03o", (int) ch); 245 } 246 } 247 248 /** 249 * Is a character printable ASCII? 250 */ 251 private static boolean isPrintableAscii(char ch) { 252 return ch >= ' ' && ch <= '~'; 253 } 254 255 /** Escape all unicode characters in string. 256 */ 257 public static String escapeUnicode(String s) { 258 int len = s.length(); 259 int i = 0; 260 while (i < len) { 261 char ch = s.charAt(i); 262 if (ch > 255) { 263 StringBuffer buf = new StringBuffer(); 264 buf.append(s.substring(0, i)); | 222 buf.append(quote(s.charAt(i))); 223 } 224 return buf.toString(); 225 } 226 227 /** 228 * Escapes a character if it has an escape sequence or is 229 * non-printable ASCII. Leaves non-ASCII characters alone. 230 */ 231 public static String quote(char ch) { 232 switch (ch) { 233 case '\b': return "\\b"; 234 case '\f': return "\\f"; 235 case '\n': return "\\n"; 236 case '\r': return "\\r"; 237 case '\t': return "\\t"; 238 case '\'': return "\\'"; 239 case '\"': return "\\\""; 240 case '\\': return "\\\\"; 241 default: 242 return (isPrintableAscii(ch)) 243 ? String.valueOf(ch) 244 : String.format("\\u%04x", (int) ch); 245 } 246 } 247 248 /** 249 * Is a character printable ASCII? 250 */ 251 private static boolean isPrintableAscii(char ch) { 252 return ch >= ' ' && ch <= '~'; 253 } 254 255 /** Escape all unicode characters in string. 256 */ 257 public static String escapeUnicode(String s) { 258 int len = s.length(); 259 int i = 0; 260 while (i < len) { 261 char ch = s.charAt(i); 262 if (ch > 255) { 263 StringBuffer buf = new StringBuffer(); 264 buf.append(s.substring(0, i)); |