2013-02-09 59 views
0

我正在閱讀文件'☼'中的一個字符,通過按(ALT + 15)鍵在記事本中輸入此字符,現在我必須在控制檯上打印此字符和值15(該字符的相應ASCII值)。問題是我得到一個ASCII值爲-2的方框字符。爲什麼不是房產工作?爲什麼不通過文件讀取簡單的字符?

#include <iostream> 
#include <fstream> 

using namespace std; 
int main() 
{ 
    ifstream myFile; 
    myFile.open("input.txt"); 
    char inputA; 
    myFile>>inputA; 
    cout<<inputA<<endl; 
    cout<<(int)inputA; 



} 
+0

☼不是ASCII字符,它是[unicode character](http://www.fileformat.info/info/unicode/char/263c/index.htm)。字符如何表示取決於文件的編碼。 – 2013-02-09 09:37:29

+0

是的,我用unicode字符選項保存了文件。但仍然沒有正確閱讀。 – user1974238 2013-02-09 09:41:40

+0

另外,我通過使用unicode big endian,unicode和UTF-10保存文件來獲得不同的結果 – user1974238 2013-02-09 09:44:09

回答

1

☼是一個unicode字符。有各種不同的unicode字符編碼,如UTF-8,UTF-16和UTF-32。但是,所有編碼都需要多個字節來表示字符☼。實際上,表示是:

UTF-8 0xE2 0x98 0xBC 
UTF-16 0x263C 
UTF-32 0x0000263C 

字節的UTF-16和UTF-32的順序取決於所述系統的字節序。

您正嘗試將字符讀入單個char。這隻會提取字符的單個字節。我不知道你的-2來自哪裏,但是當我使用UTF-8編碼try時,我得到值-30。這是因爲代表0xE2的簽名char是-30。

如何正確讀取字符,也取決於編碼。對於UTF-8,您需要爲該字符讀取一個3 char的數組。對於UTF-16,您可以使用char16_t來讀取字符。對於UTF-32,有char32_t

相關問題