gpt4 book ai didi

c - ISO-8859-1 的 base64 解码

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:35 24 4
gpt4 key购买 nike

我有以下字符串。“这是一个带有 (ä) 一些西欧字符 (ß) 的测试字符串 (à)”

使用 http://www.motobit.com/util/base64-decoder-encoder.asp我得到以下 base64 编码的字符串。

dGhpcyBpcyBhIHRlc3Qgc3RyaW5nICjgKSB3aXRoICjkKSBzb21lIHdlc3Rlcm4gZXVyb3BlIGNoYXJzICjfKQ==

当我尝试使用 C 函数对此进行解码时,我得到以下信息:

./测试输入字符串是:dGhpcyBpcyBhIHRlc3Qgc3RyaW5nICjgKSB3aXRoICjkKSBzb21lIHdlc3Rlcm4gZXVyb3BlIGNoYXJzICjfKQ==输出字符串是:这是一个测试字符串 (�) 和 (�) 一些西欧字符 (�)

int main()
{
char *in = "dGhpcyBpcyBhIHRlc3Qgc3RyaW5nICjgKSB3aXRoICjkKSBzb21lIHdlc3Rlcm4gZXVyb3BlIGNoYXJzICjfKQ==";
char out[100]="";
printf("Input string is : %s\n",in);
base64_decode(in, out);
printf("Output string is : %s\n",out);

return 0;
}

无法显示iso-8859-1字符集的大写字符。

我用来自的代码尝试了相同的字符串 http://base64.sourceforge.net/b64.c./b64 -d infile outfile

infile 包含:dGhpcyBpcyBhIHRlc3Qgc3RyaW5nICjgKSB3aXRoICjkKSBzb21lIHdlc3Rlcm4gZXVyb3BlIGNoYXJzICjfKQ==

生成的输出文件返回预期的字符串。当我打开它时(在 emacs 或 vi 中),我可以看到:

"this is a test string (à) with (ä) some western europe chars (ß)"

但是当我 cat 文件时,它显示:

cat outfile 
this is a test string (�) with (�) some western europe chars (�)

语言环境设置都是 UTF8,但有人知道为什么在标准输出上打印/显示和在文件中查看之间存在差异吗?

我正打算开始调试 base64_decode() 函数,但显示可能有误。

任何想法表示赞赏。

谢谢。

最佳答案

您输入的字符串包含在char数组中,您收集的解码结果在out变量中,它也是char数组。base64 解码后的字符串可以包含宽字符字母。因此您的 printf 语句无法识别宽字符。因此,我建议您采用 wchar_t 类型的输入字符串,并将结果收集到必须为 wchar_t 类型的 out 变量中。并使用 wprintf 显示结果。

谢谢

关于c - ISO-8859-1 的 base64 解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26006208/

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