quoted-printables をデコードする方法を探しています。
quoted-printables はアラビア文字用で、次のようになります。
=D8=B3=D8=B9=D8=A7=D8=AF
それを文字列に変換し、保存または表示する必要があります..
逆の方法(エンコード)のstackoverflowの投稿を見たことがありますが、デコードが見つかりませんでした。
quoted-printables をデコードする方法を探しています。
quoted-printables はアラビア文字用で、次のようになります。
=D8=B3=D8=B9=D8=A7=D8=AF
それを文字列に変換し、保存または表示する必要があります..
逆の方法(エンコード)のstackoverflowの投稿を見たことがありますが、デコードが見つかりませんでした。
うーん、少しハックですが、=
文字を文字に置き換えて%
NSString のstringByReplacingPercentEscapesUsingEncoding:
メソッドを使用できます。それ以外の場合は、基本的に文字列を = 文字で分割し、各要素をバイト値に変換し (NSScanner を使用して簡単に実行できます)、バイト値を C 配列に入れ、NSString のinitWithBytes:length:encoding:
メソッドを使用できます。
あなたの例は技術的には quoted-printable 形式ではないことに注意してください=
.
私の場合、私は EML から来ていました... bensnider の答えはうまくいきました... quoted-printable (少なくとも EML では) は = 記号とそれに続く \r\n を使用して行の折り返しを示すため、これが必要なコードでしたきれいに翻訳:
(私はそれらを愛しているカテゴリの原因として作られました)
@interface NSString (QuotedPrintable)
- (NSString *)quotedPrintableDecode;
@end
@implementation NSString (QuotedPrintable)
- (NSString *)quotedPrintableDecode
{
NSString *decodedString = [self stringByReplacingOccurrencesOfString:@"=\r\n" withString:@""]; // Ditch the line wrap indicators
decodedString = [decodedString stringByReplacingOccurrencesOfString:@"=" withString:@"%"]; // Change the ='s to %'s
decodedString = [decodedString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // Replace the escaped strings.
return decodedString;
}
@end
私のEML / UTF-8オブジェクトをデコードするのにうまくいきました!
場合によっては、行末が "=\r\n" ではなく "=\n" だけになることがあります。その場合は、別の手順が必要です。 ;
そうしないと、行末の「%」のバランスが取れていないため、最終ステップが失敗します。
私は iPhone については何も知りませんが、ほとんどのメール処理ライブラリにはこれを行うための関数が含まれています。メールはこの形式が使用される場所だからです。enter link description hereのような MIME デコード タイプの関数を検索することをお勧めします。
以前のポスターのアプローチも私には問題ないようです-彼はそれをハックだと説明するのは少し自虐的すぎると思います:)
quoted-printable-containing 文字列を受け取り、それらの書記素を解決する実用的なソリューションを参照してください。注意を払うべき唯一のことはエンコーディングです(その答えはUTF8に基づいているため、他のものに簡単に切り替えることができます):https://stackoverflow.com/a/32903103/2799410