@@ -2486,6 +2486,18 @@ public boolean TransactionsExists() {
24862486 public void SetBlocklength (int NewBlocklength ) {
24872487 Blocklength = NewBlocklength ;
24882488 }
2489+
2490+ //UTF strings handling
2491+ private int lengthCodepoints (String s ) {
2492+ return s .codePointCount (0 , s .length ());
2493+ }
2494+
2495+ private static String substringCodepoint (String s , int startCodepoint , int numCodepoints ) {
2496+ int startIndex = s .offsetByCodePoints (0 , startCodepoint );
2497+ int endIndex = s .offsetByCodePoints (startIndex , numCodepoints );
2498+ return s .substring (startIndex , endIndex );
2499+ }
2500+
24892501
24902502 public String doTXbuffer () {
24912503
@@ -2556,15 +2568,19 @@ public String doTXbuffer() {
25562568 Blocklength = Maxblocklength ;
25572569 }
25582570 double bl = Math .pow (2 , Blocklength );
2559- int queuelen = Main .txText .length ();
2571+ //UTF-8 Handling. Use codepoints instead of raw string length
2572+ //int queuelen = Main.txText.length();
2573+ int queuelen = lengthCodepoints (Main .txText );
25602574
25612575 if (queuelen > 0 ) {
25622576 if (queuelen <= (int ) bl ) {
25632577 newstring = Main .txText ;
25642578 Main .txText = "" ;
25652579 } else {
2566- newstring = Main .txText .substring (0 , (int ) bl );
2567- Main .txText = Main .txText .substring ((int ) bl );
2580+ //newstring = Main.txText.substring(0, (int) bl);
2581+ newstring = substringCodepoint (Main .txText , 0 , (int ) bl );
2582+ //Main.txText = Main.txText.substring((int) bl);
2583+ Main .txText = substringCodepoint (Main .txText , (int ) bl , queuelen - (int ) bl );
25682584 }
25692585
25702586// lastqueued += 1;
0 commit comments