1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Objective-C][Socket.io]マルチバイト文字が文字化けする問題

Last updated at Posted at 2021-05-19

Socket.ioを使ってiOS版トークアプリ(ネイティブ)を運用していて、以下の環境で文字化けしたので対策を実施。

[環境]
Socket.io : "Socket.IO-Client-Swift", "15.2.0"
Xcode 12.4
iOS 14.4.2
(サーバ環境については記事と関係ない為省略します。)

[現象]
メッセージをマルチバイト文字で送信した際に、サーバからアプリまでは正常に送れているもののアプリ内の処理にて文字が化ける。

実際の文字列.txt
大久保 裕平

[原因]
Socket.ioのアプリ側初期化処理で必要なオプションが指定できていなかったこと。

[対処策]

before_SocketManager.m
NSDictionary *option = @{@"log": @(NO)
                             ,@"secure": @(YES)
                             ,@"reconnectAttempts":@(0)
                             ,@"reconnects":@(NO)
                             ,@"ua":(記事と関係ないため省略)
                             };
self.manager = [[SocketManager alloc] initWithSocketURL:url config: option];

どうやら以下のオプションを追加する必要があった。

after_SocketManager.m
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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?