1 package org.kuali.common.util;
2
3 import java.nio.charset.Charset;
4
5 import org.apache.commons.lang3.StringUtils;
6 import org.junit.Test;
7
8 public class SimpleTest {
9
10 @Test
11 public void testDefaultFileEncoding() {
12 System.out.println("file.encoding=" + System.getProperty("file.encoding"));
13 System.out.println("Charset.defaultCharset().name()=" + Charset.defaultCharset().name());
14 }
15
16 @Test
17 public void testEncoding() {
18 String[] encodings = new String[] { "UTF-8", "UTF-16", "UTF-32" };
19 String s1 = "123";
20 String s2 = "𝟙𝟚𝟛";
21 String s = s1 + s2;
22 StringBuilder sb = new StringBuilder();
23 sb.append(rpad("s=" + s, 15));
24 sb.append(rpad("s.length()=" + s.length(), 15));
25 sb.append(rpad("s.substring(4, 6)=" + s.substring(4, 6), 25));
26 sb.append("\n\n");
27 StringBuilder characters = new StringBuilder();
28 for (String encoding : encodings) {
29 byte[] bytes = s.getBytes(Charset.forName(encoding));
30 char[] chars = s.toCharArray();
31 int[] codePoints = getCodePoints(chars);
32 sb.append(rpad("encoding=" + encoding, 20));
33 sb.append(rpad("bytes=" + bytes.length, 15));
34 sb.append(rpad("chars=" + chars.length, 15));
35 sb.append(rpad(HexUtils.toHexString(bytes), 55));
36 characters.append(getString(codePoints) + "\n");
37 sb.append("\n");
38 }
39 System.out.println("\n" + sb + "\n" + characters);
40 }
41
42 protected String getString(int[] codePoints) {
43 StringBuilder sb = new StringBuilder();
44 sb.append("[");
45 for (int i = 0; i < codePoints.length; i++) {
46 if (i != 0) {
47 sb.append(",");
48 }
49 int cp = codePoints[i];
50 int charCount = Character.charCount(cp);
51 sb.append(cp + ":charCount=" + charCount);
52 }
53 sb.append("]");
54 return sb.toString();
55 }
56
57 protected int[] getCodePoints(char[] chars) {
58 int[] codePoints = new int[chars.length];
59 for (int i = 0; i < chars.length; i++) {
60 int codePoint = Character.codePointAt(chars, i);
61 codePoints[i] = codePoint;
62 }
63 return codePoints;
64 }
65
66 protected String getHex(byte[] bytes) {
67 int mask = 0x000000ff;
68 StringBuilder sb = new StringBuilder();
69 for (byte b : bytes) {
70 int masked = mask & b;
71 String hex = Integer.toHexString(masked).toUpperCase();
72 String padded = StringUtils.leftPad(hex, 2, "0");
73 sb.append(padded);
74 }
75 return sb.toString();
76 }
77
78 protected String rpad(String s, int padding) {
79 return StringUtils.rightPad(s, padding, " ");
80 }
81
82 }