{Kurung Kurawal}

Java UTF8 Binary Converter

Baca postingan forum di social media, ada masalah mengenai konversi UTF-8 ke bentuk binary dan sebaliknya. Meskipun sebenarnya saya kurang jelas yang diinginkan oleh si penulis, namun telah diarahkan ke contoh demo.

Berdasarkan demo di https://sites.google.com/site/nathanlexwww/tools/utf8-convert, saya coba membuat versi Java Swing-nya.

File Jar yang dapat dijalankan, dapat didownload disini.
Dan berikut cuplikan source code nya, silakan dikembangkan.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package com.kurungkurawal.utfbinary;
 
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
 
/**
 * Created with IntelliJ IDEA.
 * Author   : ali LIM ( konglie@outlook.com )
 * Website  : http://www.konglie.web.id
 * Date     : 1/3/2015
 * Time     : 8:58 PM
 * PERIZINAN
 * Saya bukan Pengacara yang mengerti Bahasa Hukum,
 * Namun, program ini saya berikan untuk tujuan pembelajaran
 * dan bagian atau seluruh code di file ini
 * TIDAK BOLEH didistribusikan untuk tujuan komersil atau
 * berbayar, tanpa izin tertulis dari saya.
 * LICENSE
 * I am not a lawyer, but part of or all of this source code
 * MAY NOT be distributed for commercial purpose, without
 * written permission from me.
 */
public class UTFBinary extends JFrame {
    private final String APP_NAME = "UTF8 <=> Binary Converter";
    public UTFBinary(){
        super();
        setTitle(APP_NAME);
 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setMinimumSize(new Dimension(300, 240));
 
        buildGUI();
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
 
    private JTextArea txtUtf, txtBin;
    private void buildGUI(){
        Border padd = BorderFactory.createEmptyBorder(5,5,5,5);
 
        JLabel title = new JLabel(APP_NAME);
        title.setHorizontalAlignment(SwingConstants.CENTER);
        title.setBorder(padd);
 
        getContentPane().add(title, BorderLayout.NORTH);
 
        txtUtf = new JTextArea(5,30);
        txtUtf.setBorder(padd);
        txtUtf.setLineWrap(true);
 
        txtBin = new JTextArea(5,30);
        txtBin.setBorder(padd);
        txtBin.setLineWrap(true);
 
        JPanel body = new JPanel();
        body.setBorder(padd);
        body.setLayout(new BoxLayout(body, BoxLayout.X_AXIS));
        body.add(new JScrollPane(txtUtf));
        body.add(Box.createRigidArea(new Dimension(5,0)));
        body.add(new JScrollPane(txtBin));
 
        getContentPane().add(body, BorderLayout.CENTER);
 
        txtBin.addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent keyEvent) {
                convertFromBin();
            }
        });
 
        txtUtf.addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent keyEvent) {
                convertFromUtf();
            }
        });
    }
 
    private void convertFromUtf(){
        String utf = txtUtf.getText();
        String bin = "";
        try {
            byte[] bytes = utf.getBytes("UTF-8");
            for (byte b : bytes) {
                bin += String.format("%8s", Integer.toBinaryString((int) b)).replace(' ', '0');
            }
        } catch (Exception e){
            e.printStackTrace();
        }
        txtBin.setText(bin);
    }
 
    private void convertFromBin(){
        String bin = txtBin.getText();
        String utf = "";
 
        String tmp;
        int itmp;
        for(int i = 0; i < bin.length() && bin.length() >= 8; i += 8){
            try {
                tmp = bin.substring(i, i + 8);
                itmp = Integer.parseInt(tmp, 2);
                utf += new String(new byte[]{ (byte) itmp }, "utf-8");
            } catch (Exception e){
                break;
            }
        }
 
        txtUtf.setText(utf);
    }
}

Aplikasi ini hanya mendemokan fungsi esensial saja, tanpa adanya validasi atau fitur tambahan lainnya. Semoga dapat berguna untuk kita semua.