2014-09-23 553 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來顯示結果。

謝謝