Java tutorial
//package com.java2s; import java.util.Arrays; import java.util.List; public class Main { final static Byte first_set[][] = { { (byte) 233 }, { (byte) 233, (byte) 233 }, { (byte) 230 }, { (byte) 243 }, { (byte) 243, (byte) 243 }, { (byte) 247 }, { (byte) 231 }, { (byte) 185 }, { (byte) 185, (byte) 185 }, { (byte) 236 }, { (byte) 236, (byte) 236 }, { (byte) 232 }, { (byte) 234 }, { (byte) 234, (byte) 234 }, { (byte) 237 }, { (byte) 174 }, { (byte) 165 }, { (byte) 238 }, { (byte) 235 } }; final static Byte middle_set[][] = { { (byte) 228 }, { (byte) 240 }, { (byte) 180 }, { (byte) 197 }, { (byte) 242 }, { (byte) 225 }, { (byte) 227 }, { (byte) 181 }, { (byte) 244 }, { (byte) 244, (byte) 228 }, { (byte) 244, (byte) 240 }, { (byte) 244, (byte) 223 }, { (byte) 178 }, { (byte) 224 }, { (byte) 224, (byte) 242 }, { (byte) 224, (byte) 225 }, { (byte) 224, (byte) 226 }, { (byte) 179 }, { (byte) 229 }, { (byte) 182 }, { (byte) 226 } }; final static Byte last_set[][] = { {}, { (byte) 246 }, { (byte) 159 }, { (byte) 244 }, { (byte) 241 }, { (byte) 195 }, { (byte) 209 }, { (byte) 191 }, { (byte) 245 }, { (byte) 190 }, { (byte) 228 }, { (byte) 194 }, { (byte) 210 }, { (byte) 163 }, { (byte) 162 }, { (byte) 208 }, { (byte) 248 }, { (byte) 177 }, { (byte) 214 }, { (byte) 239 }, { (byte) 176 }, { (byte) 223 }, { (byte) 161 }, { (byte) 216 }, { (byte) 193 }, { (byte) 213 }, { (byte) 207 }, { (byte) 175 } }; final static Byte single_set[][] = { { (byte) 0xE9 }, { (byte) 233, (byte) 233 }, { (byte) 233, (byte) 236 }, { (byte) 230 }, { (byte) 230, (byte) 234 }, { (byte) 230, (byte) 235 }, { (byte) 243 }, { (byte) 243, (byte) 243 }, { (byte) 247 }, { (byte) 247, (byte) 233 }, { (byte) 247, (byte) 231 }, { (byte) 247, (byte) 185 }, { (byte) 247, (byte) 236 }, { (byte) 247, (byte) 165 }, { (byte) 247, (byte) 238 }, { (byte) 247, (byte) 235 }, { (byte) 231 }, { (byte) 185 }, { (byte) 185, (byte) 185 }, { (byte) 185, (byte) 236 }, { (byte) 236 }, { (byte) 236, (byte) 236 }, { (byte) 232 }, { (byte) 234 }, { (byte) 234, (byte) 234 }, { (byte) 237 }, { (byte) 174 }, { (byte) 165 }, { (byte) 238 }, { (byte) 235 }, { (byte) 228 }, { (byte) 240 }, { (byte) 180 }, { (byte) 197 }, { (byte) 242 }, { (byte) 225 }, { (byte) 227 }, { (byte) 181 }, { (byte) 225 }, { (byte) 244, (byte) 228 }, { (byte) 244, (byte) 240 }, { (byte) 244, (byte) 223 }, { (byte) 178 }, { (byte) 224 }, { (byte) 224, (byte) 242 }, { (byte) 224, (byte) 225 }, { (byte) 224, (byte) 226 }, { (byte) 179 }, { (byte) 229 }, { (byte) 182 }, { (byte) 226 } }; static List<Byte> unicode2han3last_direct(Character c) { Integer code = (int) c.charValue(); if (code >= 44032 && code <= 55203) { // Korean Area code -= 44032; Integer last = code % 28; code = (code / 28); Integer middle = code % 21; Integer first = code / 21; return Arrays.asList(concatAll(first_set[first], middle_set[middle], last_set[last])); } if (code >= 12593 && code <= 12643) { // child sound return Arrays.asList(single_set[code - 12593]); } return Arrays.asList(code.byteValue()); } public static <T> T[] concatAll(T[] first, T[]... rest) { int totalLength = first.length; for (T[] array : rest) { totalLength += array.length; } T[] result = Arrays.copyOf(first, totalLength); int offset = first.length; for (T[] array : rest) { System.arraycopy(array, 0, result, offset, array.length); offset += array.length; } return result; } }