native2ascii を自前でがんばる



うっかり、以前Javaで作成したツールのソースを
消してしまいました。。。

幸い、jarは残っていたので、逆コンパイルしたのですが、
日本語が全てasciiになってしまい、処理の流れが良くわかりません。

native2ascii の逆、ascii2nativiを何とかプログラムで
作れないかと思い、実装してみました。

何かのご参考になれば・・・



import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;

import java.io.*;


public class MainFrame extends JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;

    private JTextField input;
    private JTextField output;
    
    private static String TITLE = "ASCII変換ツール";
    
    /**
     * LookAndFeelの設定
     */
    static {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Throwable tw) { }
    }

    /**
     * @param args 起動時オプション
     */
    public static void main(String[] args) {
        // 自分自身のインスタンス化
     JFrame frame = new MainFrame();
        // フレームのセットアップ
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 終了時処理
        //画面のサイズを決定します。
        frame.setSize(new Dimension(500, 110));
        // 画面位置の設定を行います。
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setBounds( (screenSize.width - frame.getWidth()) / 2,
            (screenSize.height - frame.getHeight()) /
            2, frame.getWidth(), frame.getHeight());
        // 可視化(リアライズ)
        frame.setVisible(true);
    }

    // コンストラクタ
    public MainFrame() {
        // スーパークラスのコンストラクタ呼び出し
        super(TITLE);
        

        //実行ボタンの作成
        JButton update = new JButton("変換");
        update.setActionCommand("conv");
        update.addActionListener(this);
    
        // パネルに部品を追加
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        JPanel panel2 = new JPanel();
        panel2.add(update,BorderLayout.NORTH);
        panel.add(panel2, BorderLayout.NORTH);
    
        input = new JTextField();
        output = new JTextField();
        
        // コンテント・ペインの取得
        Container cnt = getContentPane();
        cnt.setLayout(new BorderLayout());
        // コンテント・ペインに部品を追加
        cnt.add(panel, BorderLayout.NORTH);
        cnt.add(input,BorderLayout.CENTER);
        cnt.add(output,BorderLayout.SOUTH);
        
        File file = new File("temp");
        if(file.exists()){
            file.delete();
        }
        file.mkdir();
    }

    /**
     * ボタン押下時のイベント処理
     */
    public void actionPerformed(ActionEvent ae) {
        if ("conv".equals(ae.getActionCommand())) {
            try {
                String raw = input.getText();
                StringBuffer result = new StringBuffer();
                
                for(;;){
                    if(raw.length() == 0){
                        break;
                    }
                    int index = raw.indexOf("\\u");
                    
                    if (index == -1){
                        result.append(raw);
                        break;
                    } else {
                        if (0 < index){
                            result.append(raw.substring(0,index));
                        }
                        
                        if (index + 6 <= raw.length()){
                            char tmp = (char)Integer.parseInt(raw.substring(index+2,index+6),16);
                            result.append(tmp);
                            raw = raw.substring(index+6);
                        } else {
                            break;
                        }
                    }
                    
                }
                
                output.setText(result.toString());
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}




もどる