Javaコードはエンコーディングについて何も表示しません。 は、Java SDKの使用をコードしているかを知る必要があります。
System.out.println("Default Charset=" + Charset.defaultCharset());
あなたのJava SDKは、UTF-8でコードを実行する場合:src.getBytes(StandardCharsets.ISO_8859_1)
はISO_8859_1にUTF-8エンコーディング文字列を変更することができます。あなたは、Objective-Cでコードを見ることができます
:
- (void)testEncoding {
NSString *originStr = @"ñèÒ";
//Encode :
NSData *utf8Data = [originStr dataUsingEncoding:NSUTF8StringEncoding];
NSData *latinData = [originStr dataUsingEncoding:NSISOLatin1StringEncoding];
NSLog(@"1.0: change a string's encoding ==>\n%@ ,%@",utf8Data,latinData);
NSString *utf8Base64String = [utf8Data base64EncodedStringWithOptions:0];
NSString *latinDataBase64String = [latinData base64EncodedStringWithOptions:0];
NSLog(@"1.1 encoding the data(byte[]) to base64string ==>\n%@ ,%@",utf8Base64String,latinDataBase64String);
//Decode :
NSData *utf8DecodeData = [[NSData alloc] initWithBase64EncodedString:utf8Base64String options:0];
NSData *latinDecodeData = [[NSData alloc] initWithBase64EncodedString:latinDataBase64String options:0];
NSLog(@"2.0 decode the base64string to data(byte[])==>\n %@ ,%@",utf8DecodeData,latinDecodeData);
NSString *utf8DecodeString = [[NSString alloc] initWithData:utf8DecodeData encoding:NSUTF8StringEncoding];
NSString *latinDecodeString = [[NSString alloc] initWithData:latinDecodeData encoding:NSISOLatin1StringEncoding];
NSLog(@"2.1 change the data(byte[]) the string with it's encoding ==>\n %@ ,%@",utf8DecodeString,latinDecodeString);
}
結果は
1.0: change a string's encoding ==>
<c3b1c3a8 c29ac392> ,<f1e89ad2>
1.1 encoding the data(byte[]) to base64string ==>
w7HDqMKaw5I= ,8eia0g==
2.0 decode the base64string to data(byte[])==>
<c3b1c3a8 c29ac392> ,<f1e89ad2>
2.1 change the data(byte[]) the string with it's encoding ==>
ñèÒ ,ñèÒ
あなたはNSISOLatin1StringEncoding
にデフォルトでUTF-8エンコーディングされた文字列@"ñèÒ"
を変更したとき、あなたは意志であります完全な別のデータを取得<f1e89ad2>
とbase64string 8eia0g==
状況に応じて、javコードsrc.getBytes(StandardCharsets.ISO_8859_1)
は、文字列をデータ(バイト[])に変更すると、Java環境によって異なります。だから私はあなたのbase64stringを復号するためのテストを行うが、私はcurrectあるエンコーディングわからない:
NSString *str = @"ZB3NNxAMNB/x6JpAryCd0g==";
NSData *data = [[NSData alloc] initWithBase64EncodedString:str options:0];
NSString *resultString = @"";
for(NSInteger i=1;i<16;i++) {
NSString *strDe = [[NSString alloc] initWithData:data encoding:i];
resultString = [NSString stringWithFormat:@"%@%zd => %@\n",resultString,i,strDe];
}
NSLog(@"%@",resultString);
結果は次のとおりです。非常に明確に記述する情報、ため
1 => dÍ74ñè@¯ Ò
2 => d˝74æŁÜ@fl µ¼
3 => (null)
4 => (null)
5 => dÍ74ñè@¯ Ò
6 => (null)
7 => (null)
8 => dヘ74咫ッ 旆
9 => dÍ74ńč@Ż Ň
10 => 搝촷ဌ㐟驀꼠鷒
11 => dН74сиљ@Ї ќТ
12 => (null)
13 => (null)
14 => (null)
15 => dÍ74ńčš@Ż ťŇ
感謝。だから、Javaバイト配列のデコードされたデータ、インデックスによるインデックスは、objectiveCデコードされたデータと比較できないと言っていますか? –