gpt4 book ai didi

objective-c - Base64 和 utf8/National 字符编码

转载 作者:行者123 更新时间:2023-11-29 04:38:05 25 4
gpt4 key购买 nike

我想使用波兰国家字符进行 Base64 编码。例如:

"zażółć gęślą jaźń"

应该是:

emEmIzM4MDvzJiMzMjI7JiMyNjM7IGcmIzI4MTsmIzM0NztsJiMyNjE7IGphJiMzNzg7JiMzMjQ7

但实现此解决方案后:

-(NSString *)Base64Encode:(NSData *)data{
//Point to start of the data and set buffer sizes
int inLength = [data length];
int outLength = ((((inLength * 4)/3)/4)*4) + (((inLength * 4)/3)%4 ? 4 : 0);
const char *inputBuffer = [data bytes];
char *outputBuffer = malloc(outLength);
outputBuffer[outLength] = 0;

//64 digit code
static char Encode[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

//start the count
int cycle = 0;
int inpos = 0;
int outpos = 0;
char temp;

//Pad the last to bytes, the outbuffer must always be a multiple of 4
outputBuffer[outLength-1] = '=';
outputBuffer[outLength-2] = '=';


while (inpos < inLength){
switch (cycle) {
case 0:
outputBuffer[outpos++] = Encode[(inputBuffer[inpos]&0xFC)>>2];
cycle = 1;
break;
case 1:
temp = (inputBuffer[inpos++]&0x03)<<4;
outputBuffer[outpos] = Encode[temp];
cycle = 2;
break;
case 2:
outputBuffer[outpos++] = Encode[temp|(inputBuffer[inpos]&0xF0)>> 4];
temp = (inputBuffer[inpos++]&0x0F)<<2;
outputBuffer[outpos] = Encode[temp];
cycle = 3;
break;
case 3:
outputBuffer[outpos++] = Encode[temp|(inputBuffer[inpos]&0xC0)>>6];
cycle = 4;
break;
case 4:
outputBuffer[outpos++] = Encode[inputBuffer[inpos++]&0x3f];
cycle = 0;
break;
default:
cycle = 0;
break;
}
}
NSString *pictemp = [NSString stringWithUTF8String:outputBuffer];
free(outputBuffer);
return pictemp;
}

当然我得到的东西略有不同:

emHFvMOzxYLEhyBnxJnFm2zEhSBqYcW6xYQ

女巫回到我身边(来自在线 decoder ):

zażółć gęślą jaźń

我这样调用它:

NSString* str= _@"zażółć gęślą jaźń";
NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];

NSString * encodeString = [[[NSString alloc] init] autorelease];

encodeString = [self Base64Encode:data];

最佳答案

在线解码器位于 ISO-8859-1 页面上,而不是 UTF-8 页面上。如果你强制使用 UTF-8,它就可以工作。

此外,编码版本的差异可能是因为组合字符与分解字符(不确定)。

关于objective-c - Base64 和 utf8/National 字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10798084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com