Socket.ioを使ってiOS版トークアプリ(ネイティブ)を運用していて、以下の環境で文字化けしたので対策を実施。
[環境]
Socket.io : "Socket.IO-Client-Swift", "15.2.0"
Xcode 12.4
iOS 14.4.2
(サーバ環境については記事と関係ない為省略します。)
[現象]
メッセージをマルチバイト文字で送信した際に、サーバからアプリまでは正常に送れているもののアプリ内の処理にて文字が化ける。
大ä¹
ä¿ è£å¹³
[原因]
Socket.ioのアプリ側初期化処理で必要なオプションが指定できていなかったこと。
[対処策]
NSDictionary *option = @{@"log": @(NO)
,@"secure": @(YES)
,@"reconnectAttempts":@(0)
,@"reconnects":@(NO)
,@"ua":(記事と関係ないため省略)
};
self.manager = [[SocketManager alloc] initWithSocketURL:url config: option];
どうやら以下のオプションを追加する必要があった。
NSDictionary *option = @{@"log": @(NO)
,@"secure": @(YES)
,@"reconnectAttempts":@(0)
,@"reconnects":@(NO)
,@"doubleEncodeUTF8":@(YES) //<--追加
,@"forceWebsockets":@(YES) //<--追加
,@"forcePolling":@(NO) //<--追加
,@"ua":(記事と関係ないため省略)
};
self.manager = [[SocketManager alloc] initWithSocketURL:url config: option];
[経緯]
今回の不具合は、Xcodeを更新する際にpodの中身も更新したが、Socket.ioもずいぶん昔のバージョンを使用していた為更新した。その際にSwiftバージョンを上げなくてはならず、バージョンを上げた際にSocket.ioの初期化処理も修正した。オプションはこれまでのものを流用していたが、今回説明したものを正しく指定しなかったため文字化けが発生した。
そんなの知らんがな。
オフィシャルにでも明記しといてくれよ。
参考までに。
[参考文献]
https://github.com/socketio/socket.io-client-swift/issues/599