2014-09-23 556 views
2

我有以下字符串。 “这是一个测试字符串(A)与(A)一些西欧字符(SS)”base64解码为ISO-8859-1

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

dGhpcyBpcyBhIHRlc3Qgc3RyaW5nICjgKSB3aXRoICjkKSBzb21lIHdlc3Rlcm4gZXVyb3BlIGNoYXJzICjfKQ ==

当我尝试用C函数解码此,我得到如下:

./test 输入的字符串: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),我可以看到:

“这是一个测试字符串(A)与(A)一些西欧字符(SS)”

但当我的猫的文件,它表明:

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

区域设置都是UTF8但任何人都知道为什么会出现在标准输出和查看文件打印/显示器之间的差异?

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

任何想法赞赏。

谢谢。

+0

您应该评价软件的质量大致与网站的配色方案成正比。 – 2014-09-23 23:46:18

回答

0

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

谢谢