6

MD5 関数と Base64 エンコーディングを使用してユーザー シークレットを生成しています (使用される API のデータ レイヤーにログインするために使用されます)。

私はJavaScriptでコードを作成しましたが、それは問題ありませんが、Objective CではBOMに苦労しています

私のコードは次のとおりです。

NSString *str = [[NSString alloc] 
                 initWithFormat:@"%@%@%@%d", 
                    [auth uppercaseString], 
                    [user uppercaseString], 
                    [pwd uppercaseString], 
                    totalDaysSince2000];

NSString *sourceString = [[NSString alloc] initWithFormat:@"%02x%02x%02x%@", 
                          0xEF, 
                          0xBB, 
                          0xBF, 
                          str]; 

NSString *strMd5 = [sourceString MD5]; 

NSData *sourceData = [strMd5 dataUsingEncoding:NSUTF8StringEncoding];  
NSString *base64EncodedString = [[sourceData base64EncodedString] autorelease];  

上記のコードを使用して、メモリに入ります:

代替テキスト
(ソース: balexandre.com )

魔女は私が本当に必要としているものではない...

私も試してみました

"%c%c%c%@", (char)239, (char)187, (char)191, str

運悪く…

usingUTF8Stringは、C# のように BOM を自動的に追加する継ぎ目はありません :-(

BOM を正しく追加するにはどうすればよいですか?

4

3 に答える 3

8

BOMをエスケープ文字リテラルとしてフォーマット文字列に直接埋め込んでみてください。

NSString *sourceString = [[NSString alloc] initWithFormat:@"\357\273\277%@", str];
于 2010-04-06T13:38:10.880 に答える
8

NSStringではなく、NSDataオブジェクトにBOMを追加する必要がある場合があります。このようなもの:

char BOM[] = {0xEF, 0xBB, 0xBF};
NSMutableData* data = [NSMutableData data];
[data appendBytes:BOM length:3];
[data appendData:[strMd5 dataUsingEncoding:NSUTF8StringEncoding]];
于 2010-04-06T13:44:47.893 に答える