MFC Javaでソケットを使用する際に文字化けが発生したときの解決方法
MFCでJavaのSocket通信を行うと、文字化けは送信側と受信側の2点で発生する可能性があります。以下に対策を提示します。
送信元:
- 送信側のMFCコードでは、送られる漢字をバイト列に変換し、UTF-8をエンコードする:
CString str = _T("中文字符");
std::string utf8Str = CW2A(str.GetString(), CP_UTF8);
jbyteArray byteArray = env->NewByteArray(utf8Str.length());
env->SetByteArrayRegion(byteArray, 0, utf8Str.length(), reinterpret_cast<jbyte*>(const_cast<char*>(utf8Str.c_str())));
env->CallVoidMethod(javaSocket, sendMethod, byteArray);
受信側:
- Java側の受信部において、受信したバイト列をUTF-8でデコードし、文字列に変換する。
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
String receivedData = new String(buffer, 0, len, "UTF-8");
System.out.println("Received data: " + receivedData);
- 受信したデータをデコードする際に文字化けする場合、GBKエンコードでデコードしてみて下さい。
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
String receivedData = new String(buffer, 0, len, "GBK");
System.out.println("Received data: " + receivedData);
上記の方法で、MFC Javaでソケットを利用する際の中文字化け問題を解決できます。