English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

IOS URLの中国語のエスケープ文字問題の解決策

IOSのURL中国語の乱雑問題の解決策

HTTPS接続を行う際、クライアントがHTTPSアドレスを合成する必要があります

アドレスに中国語が含まれている場合、プログラムがクラッシュします、チェックすると中国語がエンコードされていないことが原因でした

NSStringライブラリ内で以下の2つのメソッドを見つけました

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

試してみた、効果的でした

NSString* string1 = @"https://www.cloudsafe.com/フォルダー";
NSString* string2 = [string1 stringByAddingPercentEscapesUsingEncoding:NSUTF88StringEncoding];
NSString* string3 = [string2 stringByAddingPercentEscapesUsingEncoding:NSUTF88StringEncoding];
NSString* string4 = [string2 stringByReplacingPercentEscapesUsingEncoding:NSUTF88StringEncoding];
NSString* string5 = [string3 stringByReplacingPercentEscapesUsingEncoding:NSUTF88StringEncoding];
NSString* string6 = [string4 stringByReplacingPercentEscapesUsingEncoding:NSUTF88StringEncoding];
NSString* string7 = [string5 stringByReplacingPercentEscapesUsingEncoding:NSUTF88StringEncoding];

stringの出力1-7以下の結果になります

string1:https://www.cloudsafe.com/フォルダー
string2:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9
string3:https://www.cloudsafe.com/%25E6%2596%2587%25E4%25BB%25B6%25E5%25A4%25B9
string4:https://www.cloudsafe.com/フォルダー
string5:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9
string6:https://www.cloudsafe.com/フォルダー
string7:https://www.cloudsafe.com/フォルダー

使い方について簡単に説明します:

URLを合成した後、String全体に2回のエンコードを行います

NSMutableString *address = [[NSMutableString stringWithString:SetNiChengStringWithoutUserNameAndNiCheng] mutableCopy];
  address = [[address stringByAppendingString:app.name] mutableCopy];
  address = [[address stringByAppendingString:@"/"] mutableCopy];
  address = [[address stringByAppendingString:_nameTextField.text] mutableCopy];
  address = [[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] mutableCopy];8StringEncoding] mutableCopy];
  address = [[address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] mutableCopy];8StringEncoding] mutableCopy];

サーバー側はデータを単に保存する場合、サーバーがデータを受け取った後、中国語に変換する必要はありません

クライアントがこのデータをリクエストする場合、クライアント自身でデコードを行います

文字列を取得した後、一度デコードすることで通常に表示される中国語になります:

 str = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] mutableCopy];8StringEncoding]; 

ご覧いただきありがとうございます。皆様のご支援に感謝します!

Elasticsearchチュートリアル