用于ISO-8859-1的base64解码

时间:2014-09-23 23:21:57

标签: c base64 iso-8859-1

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

使用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 ==

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

  

“这是一个测试字符串(à)与(ä)一些西欧字符(ß)”

但是当我抓住文件时,它会显示:

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

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

我打算开始调试base64_decode()函数,但显示器可能是红色鲱鱼。

任何想法都赞赏。

感谢。

1 个答案:

答案 0 :(得分:0)

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

由于