8

quoted-printables をデコードする方法を探しています。

quoted-printables はアラビア文字用で、次のようになります。

=D8=B3=D8=B9=D8=A7=D8=AF

それを文字列に変換し、保存または表示する必要があります..

逆の方法(エンコード)のstackoverflowの投稿を見たことがありますが、デコードが見つかりませんでした。

4

6 に答える 6

10

うーん、少しハックですが、=文字を文字に置き換えて%NSString のstringByReplacingPercentEscapesUsingEncoding:メソッドを使用できます。それ以外の場合は、基本的に文字列を = 文字で分割し、各要素をバイト値に変換し (NSScanner を使用して簡単に実行できます)、バイト値を C 配列に入れ、NSString のinitWithBytes:length:encoding:メソッドを使用できます。

あなたの例は技術的には quoted-printable 形式ではないことに注意してください=.

于 2011-11-25T18:07:03.870 に答える
3

私の場合、私は 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オブジェクトをデコードするのにうまくいきました!

于 2012-06-04T21:20:48.880 に答える
2

場合によっては、行末が "=\r\n" ではなく "=\n" だけになることがあります。その場合は、別の手順が必要です。 ;

そうしないと、行末の「%」のバランスが取れていないため、最終ステップが失敗します。

于 2012-09-24T21:15:58.187 に答える
1

私は iPhone については何も知りませんが、ほとんどのメール処理ライブラリにはこれを行うための関数が含まれています。メールはこの形式が使用される場所だからです。enter link description hereのような MIME デコード タイプの関数を検索することをお勧めします。

以前のポスターのアプローチも私には問題ないようです-彼はそれをハックだと説明するのは少し自虐的すぎると思います:)

于 2012-02-14T12:57:09.990 に答える
0

quoted-printable-containing 文字列を受け取り、それらの書記素を解決する実用的なソリューションを参照してください。注意を払うべき唯一のことはエンコーディングです(その答えはUTF8に基づいているため、他のものに簡単に切り替えることができます):https://stackoverflow.com/a/32903103/2799410

于 2015-10-02T08:51:32.713 に答える