2006-09-29 Java文字列からASCII文字列(\u12345 形式: 12345は10進数値)へ(RTF内の日本語表現用) Java ソースメモ \u65E5 のように16進で表現したい場合は、int v = ch のところを、 String v = Integer.toHexString(ch).toUpperCase(); のように文字列で取得するように。。 ※私自身、非常にはまってしまったのだが、ここでの文字列strはSJISである。UTF-8に変換してしまうと変換できなくなってしまう。 private static String escapeJavaStyleString(String str, boolean escapeSingleQuote) throws IOException { StringBuffer sb = new StringBuffer(); if (str == null) { return ""; } int sz; sz = str.length(); if(sz > 1) { sb.append("{\\ul"); } else { sb.append("{"); } for (int i = 0; i < sz; i++) { char ch = str.charAt(i); int v = ch;//String v = Integer.toHexString(ch).toUpperCase(); // handle unicode if (ch > 0xfff) { sb.append("\\u" + v); } else if (ch > 0xff) { sb.append("\\u0" + v); } else if (ch > 0x7f) { sb.append("\\u00" + v); } else if (ch < 32) { switch (ch) { case '\b': sb.append('\\'); sb.append('b'); break; case '\n': sb.append('\\'); sb.append('n'); break; case '\t': sb.append('\\'); sb.append('t'); break; case '\f': sb.append('\\'); sb.append('f'); break; case '\r': sb.append('\\'); sb.append('r'); break; default : if (ch > 0xf) { sb.append("\\u00" + v); } else { sb.append("\\u000" + v); } break; } } else { switch (ch) { case '\'': if (escapeSingleQuote) { sb.append('\\'); } sb.append('\''); break; case '"': case '\\': case '{': case '}': sb.append('\\'); sb.append(ch); break; default : sb.append(ch); break; } } if(sz > 1) sb.append(" ?"); } if(sz > 1) { sb.append("\\ul0 }"); } else { sb.append("}"); } return new String(sb); }