/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package pt.jkaiui.manager; import pt.jkaiui.JKaiUI; import sun.misc.*; import pt.jkaiui.core.KaiString; /** * * @author yuu@akron */ public class StringByteConverter { //htmlencode�֐��@���Ȃ�Ă��Ƃ� private static String HtmlUnicodeencode(String s, int radix) { StringBuffer sb = new StringBuffer(""); char ch[] = s.toCharArray(); for (int i = 0; i < ch.length; i++) { if (Character.getNumericValue(ch[i]) >= 1) { sb.append(ch[i]); } else if (Character.isWhitespace(ch[i])) { sb.append(ch[i]); } else { sb.append("&#"); if (radix == 16) { sb.append("x"); } sb.append(Integer.toString(ch[i], radix) + ";"); } } return sb.toString(); } //htmldecode�֐� public static String HtmlUnicodedecode(String encoded_str, int radix) { String retStr = ""; // char[] chararray; encoded_str = encoded_str.replaceAll("\\&\\;", "&"); encoded_str = encoded_str.replaceAll("\\"\\;", "\""); encoded_str = encoded_str.replaceAll("\\<\\;", "<"); encoded_str = encoded_str.replaceAll("\\>\\;", ">"); encoded_str = encoded_str.replaceAll("\\ \\;", " "); for (int i = 0; i < encoded_str.length(); i++) { if (encoded_str.charAt(i) != '&') { retStr += encoded_str.charAt(i); continue; } int index = encoded_str.indexOf(";", i); if (index < 0) { continue; } String str2 = encoded_str.substring(i, index); str2 = str2.replaceAll("\\&", ""); str2 = str2.replaceAll("\\#", ""); int utf16_code = Integer.parseInt(str2, radix); byte[] char_set = new byte[2]; char_set[0] = (byte) (utf16_code >> 8); char_set[1] = (byte) (utf16_code & 255); try { String new_str = new String(char_set, "utf-16"); retStr += new_str; } catch (Exception e) { System.out.println("HtmlUnicodedecode:"+e); } i = index; } return retStr; } //htmlencode�֐��@���Ȃ�Ă��Ƃ� private static String HtmlUnicodeencode(byte[] s, int radix) { StringBuffer sb = new StringBuffer(""); // char ch[] = s.toCharArray(); for (int i = 0; i < s.length; i++) { if (Character.getNumericValue(s[i]) >= 1) { sb.append(s[i]); } else if (Character.isWhitespace(s[i])) { sb.append(s[i]); } else { sb.append("&#"); if (radix == 16) { sb.append("x"); } sb.append(Integer.toString(s[i], radix) + ";"); } } return sb.toString(); } public static String BytetoString(byte[] str) { try { if (JKaiUI.getKaiEngineVersion()==null) { return new String(str); } if (JKaiUI.getKaiEngineVersion().equals("7.4.18")) { return new String(str, "Windows-31j"); } if (JKaiUI.getKaiEngineVersion().equals("7.4.22")) { return new String(str, "utf-8"); } } catch (Exception e) { System.out.println("bytetostring:" + e); } return new String(str); } public static byte[] StringtoByte(String str) { try { if (JKaiUI.getKaiEngineVersion()==null) { return str.getBytes(); } if (JKaiUI.getKaiEngineVersion().equals("7.4.18")) { return str.getBytes("Windows-31j"); } if (JKaiUI.getKaiEngineVersion().equals("7.4.22")) { return str.getBytes("utf-8"); } } catch (Exception e) { System.out.println("stringtobyte:" + e); } return str.getBytes(); } public static String BytetoStringforPM(byte[] str, String user) { try { if (JKaiUI.getChatManager().getSelectedEncoding(user).equals("JKaiUI(7.4.18)")) { return new String(str, "Windows-31j"); } if (JKaiUI.getChatManager().getSelectedEncoding(user).equals("JKaiUI(7.4.22)")) { return new String(str, "utf-8"); } if (JKaiUI.getChatManager().getSelectedEncoding(user).equals("WebUI(7.4.18)")) { String tmp = new String(str, "Windows-31j"); String[] tmpstr = tmp.split(";"); String returnstr = tmpstr[0] + ";" + tmpstr[1] + ";" + HtmlUnicodedecode(tmpstr[2].replaceAll("\2", ";"), 10) + ";"; return returnstr; } if (JKaiUI.getChatManager().getSelectedEncoding(user).equals("WebUI(7.4.22)")) { String tmp = new String(str, "utf-8"); String[] tmpstr = tmp.split(";"); String returnstr = tmpstr[0] + ";" + tmpstr[1] + ";" + HtmlUnicodedecode(tmpstr[2].replaceAll("\2", ";"), 10) + ";"; return returnstr; } if (JKaiUI.getChatManager().getSelectedEncoding(user).equals("GUI(7.4.18)")) { return new String(str, "Windows-31j"); } if (JKaiUI.getChatManager().getSelectedEncoding(user).equals("GUI(7.4.22)")) { return new String(str, "utf-8"); } } catch (Exception e) { System.out.println("bytetostringforpm:" + e); } return new String(str); } public static byte[] StringtoByteforPM(String str, String user) { try { if (JKaiUI.getChatManager().getSelectedEncoding(user).equals("JKaiUI(7.4.18)")) { return str.getBytes("Windows-31j"); } if (JKaiUI.getChatManager().getSelectedEncoding(user).equals("JKaiUI(7.4.22)")) { return str.getBytes("utf-8"); } if (JKaiUI.getChatManager().getSelectedEncoding(user).equals("WebUI(7.4.18)")) { String[] tmp = str.split(";"); String sendstr = tmp[0] + ";" + tmp[1] + ";" + new KaiString(HtmlUnicodeencode(tmp[2], 10)).toString() + ";"; return sendstr.getBytes("Windows-31j"); } if (JKaiUI.getChatManager().getSelectedEncoding(user).equals("WebUI(7.4.22)")) { String[] tmp = str.split(";"); String returnstr = tmp[0] + ";" + tmp[1] + ";" + new KaiString(HtmlUnicodeencode(tmp[2], 10)).toString() + ";"; return returnstr.getBytes("utf-8"); } if (JKaiUI.getChatManager().getSelectedEncoding(user).equals("GUI(7.4.18)")) { return str.getBytes("Windows-31j"); } if (JKaiUI.getChatManager().getSelectedEncoding(user).equals("GUI(7.4.22)")) { return str.getBytes("utf-8"); } } catch (Exception e) { System.out.println("stringtobyeforpm:" + e); } return str.getBytes(); } public static void main(String[] args) { System.out.println("StringByteConverter test"); HexDumpEncoder enc = new HexDumpEncoder(); try { String tmp = "��"; System.out.println("utf-16:" + enc.encode(tmp.getBytes("utf-16"))); System.out.println("windows-31j:" + enc.encode(tmp.getBytes("Windows-31j"))); System.out.println("utf-8:" + enc.encode(tmp.getBytes("utf-8"))); System.out.println("sjis:" + enc.encode(tmp.getBytes("SJIS"))); System.out.println("htmlunicode windows-31j:" + enc.encode(HtmlUnicodeencode(tmp, 10).getBytes("windows-31j"))); System.out.println("htmlunicode utf-8:" + enc.encode(HtmlUnicodeencode(tmp, 10).getBytes("utf-8"))); byte[] str = tmp.getBytes("windows-31j"); System.out.println(HtmlUnicodedecode(new String(str, "windows-31j"), 10)); str = tmp.getBytes("utf-8"); System.out.println(HtmlUnicodedecode(new String(str, "utf-8"), 10)); } catch (Exception e) { System.out.println("error"); } } }