| 1 10 package org.mmbase.util.transformers; 11 12 import java.io.Reader ; 13 import java.io.Writer ; 14 15 import org.mmbase.util.logging.*; 16 17 24 25 public class UnicodeEscaper extends ReaderTransformer implements CharTransformer { 26 private static final Logger log = Logging.getLoggerInstance(UnicodeEscaper.class); 27 28 public Writer transform(Reader r, Writer w) { 29 try { 30 while (true) { 31 int c = r.read(); 32 if (c == -1) break; 33 if (c > 127) { 34 String hex = Integer.toHexString(c); 35 int i = hex.length(); 36 w.write("\\u"); 37 while (i < 4) { 38 w.write('0'); i++; 39 } 40 w.write(hex); 41 } else { 42 w.write(c); 43 } 44 } 45 } catch (Exception e) { 46 log.error(e.toString()); 47 } 48 return w; 49 } 50 51 public Writer transformBack(Reader r, Writer w) { 52 try { 53 while (true) { 54 int c = r.read(); 55 if (c == -1) break; 56 if (c == '\\') { 57 c = r.read(); 58 if (c == -1) { w.write('\\'); break; } 59 if (c == 'u') { 60 StringBuffer hex = new StringBuffer (4); 62 while (c != -1 && hex.length() < 4) { 63 c = r.read(); 64 hex.append((char) c); 65 } 66 w.write((char) Integer.parseInt(hex.toString(), 16)); 67 } else { 68 w.write("\\" + (char) c); 69 } 70 } else { 71 w.write((char) c); 72 } 73 } 74 } catch (java.io.IOException e) { 75 log.error(e.toString()); 76 } 77 return w; 78 } 79 80 public String toString() { 81 return "UnicodeEscaper"; 82 } 83 } 84 | Popular Tags |