🎱

ProcessingでbyteデータをUTF-8のStringにする方法

2021/12/18に公開

Unityから日本語の文字データをbyte配列にしてProcessingに送信したら,文字化けが起きました.

サーバー側(Processing)

import processing.net.*;
import java.nio.charset.StandardCharsets;

Server server;

void setup() {
  server = new Server(this, 5555);
}
void draw() {
  Client c = server.available();
  if (c != null) {
    String s = c.readStringUntil('\n');
    println(s);//文字化け
  }
}

調べてみたらやっぱりUTF-8になってないのが原因のようでした.

下のように書けば解決しました

import processing.net.*;
import java.nio.charset.StandardCharsets;
Server server;

void setup() {
  server = new Server(this, 5555);
  println("start server at address: " + server.ip());
}
void draw() {
  Client c = server.available();
  if (c != null) {
    byte[] b = c.readBytes();
    String s = new String(b, StandardCharsets.UTF_8);
    println(s);//送信した通りに表示
  }
}

Discussion