1 package edu.jiangxin.apktoolbox.convert.zh2unicode; 2 3 import edu.jiangxin.apktoolbox.swing.extend.EasyPanel; 4 import edu.jiangxin.apktoolbox.utils.Constants; 5 6 import javax.swing.*; 7 import java.awt.*; 8 import java.io.Serial; 9 import java.io.UnsupportedEncodingException; 10 11 public class Zh2UnicodeConvertPanel extends EasyPanel { 12 @Serial 13 private static final long serialVersionUID = 1L; 14 15 private JPanel zhPanel; 16 17 private JTextArea zhTextArea; 18 19 private JPanel unicodePanel; 20 21 private JTextArea unicodeTextArea; 22 23 public Zh2UnicodeConvertPanel() throws HeadlessException { 24 super(); 25 } 26 27 @Override 28 public void initUI() { 29 BoxLayout boxLayout = new BoxLayout(this, BoxLayout.Y_AXIS); 30 setLayout(boxLayout); 31 32 createTextPanel(); 33 add(Box.createVerticalStrut(Constants.DEFAULT_Y_BORDER)); 34 createOperationPanel(); 35 } 36 37 private void createTextPanel() { 38 JPanel textPanel = new JPanel(); 39 textPanel.setLayout(new BoxLayout(textPanel, BoxLayout.X_AXIS)); 40 add(textPanel); 41 42 createZhPanel(); 43 textPanel.add(zhPanel); 44 45 textPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER)); 46 47 createUnicodePanel(); 48 textPanel.add(unicodePanel); 49 } 50 51 private void createZhPanel() { 52 zhPanel = new JPanel(); 53 zhPanel.setLayout(new BorderLayout()); 54 zhPanel.setBorder(BorderFactory.createTitledBorder("中文")); 55 56 zhTextArea = new JTextArea(); 57 zhTextArea.setToolTipText("输入中文"); 58 zhTextArea.setEditable(true); 59 60 JScrollPane zhScrollPane = new JScrollPane(zhTextArea); 61 zhScrollPane.setPreferredSize(new Dimension(200, 500)); 62 63 zhPanel.add(zhScrollPane); 64 } 65 66 private void createUnicodePanel() { 67 unicodePanel = new JPanel(); 68 unicodePanel.setLayout(new BorderLayout()); 69 unicodePanel.setBorder(BorderFactory.createTitledBorder("Unicode")); 70 71 unicodeTextArea = new JTextArea(); 72 unicodeTextArea.setToolTipText("Enter Unicode Character"); 73 unicodeTextArea.setEditable(true); 74 75 JScrollPane unicodeScrollPane = new JScrollPane(unicodeTextArea); 76 unicodeScrollPane.setPreferredSize(new Dimension(200, 500)); 77 78 unicodePanel.add(unicodeScrollPane); 79 } 80 81 private void createOperationPanel() { 82 JPanel operationPanel = new JPanel(); 83 operationPanel.setLayout(new BoxLayout(operationPanel, BoxLayout.X_AXIS)); 84 add(operationPanel); 85 86 JButton zh2UnicodeConvertBtn = new JButton("中文->Unicode"); 87 zh2UnicodeConvertBtn.addActionListener(e -> { 88 String value = zhTextArea.getText(); 89 unicodeTextArea.setText(string2Unicode(value)); 90 }); 91 92 JButton unicode2ZhConvertBtn = new JButton("Unicode->中文"); 93 unicode2ZhConvertBtn.addActionListener(e -> { 94 String value = unicodeTextArea.getText(); 95 zhTextArea.setText(unicode2String(value)); 96 }); 97 98 operationPanel.add(zh2UnicodeConvertBtn); 99 operationPanel.add(Box.createHorizontalStrut(Constants.DEFAULT_X_BORDER)); 100 operationPanel.add(unicode2ZhConvertBtn); 101 } 102 103 private String string2Unicode(String str) { 104 StringBuilder sb = new StringBuilder(); 105 byte[] bytes; 106 try { 107 bytes = str.getBytes("unicode"); 108 } catch (UnsupportedEncodingException e) { 109 logger.error("string2Unicode: UnsupportedEncodingException"); 110 return null; 111 } 112 for (int i = 2; i < bytes.length - 1; i += 2) { 113 sb.append("\\u"); 114 String firstByte = Integer.toHexString(bytes[i] & 0xff); 115 sb.append("0".repeat(2 - firstByte.length())); 116 sb.append(firstByte); 117 String secondByte = Integer.toHexString(bytes[i + 1] & 0xff); 118 sb.append("0".repeat(2 - secondByte.length())); 119 sb.append(secondByte); 120 } 121 return sb.toString().toLowerCase(); 122 } 123 124 private String unicode2String(String unicodeStr) { 125 StringBuilder sb = new StringBuilder(); 126 String[] characterArray = unicodeStr.toLowerCase().split("\\\\u"); 127 for (String s : characterArray) { 128 if (s.equals("")) { 129 continue; 130 } 131 char character = (char) Integer.parseInt(s.trim(), 16); 132 sb.append(character); 133 } 134 return sb.toString(); 135 } 136 }