English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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];
ご覧いただきありがとうございます。皆様のご支援に感謝します!