2012-12-18 35 views
3

我有一個關於保存C字符數組中的字符的問題。C字符超過128

我必須從文件中讀取文本到「char」類型的數組中(我不能使用unsigned char)。當某些字符的值超過127(例如€,ä,ö,...)時,它們會將它們保存爲負值,但它們通常需要更多空間(例如€需要3個負值)。

如何計算這些負值回無符號的字符。有人可以將我鏈接到關於該問題的教程或指南嗎?

+4

如果像'€'這樣的單個字符需要三個'char',那麼您可能正在讀取一個[UTF-8](http://en.wikipedia.org/wiki/UTF-8)編碼文件。 –

回答

-1
char x = 128; 

unsigned char y = (unsigned char) x; 

printf("%c %u\n", x, y); 
1

這取決於編碼使用。

傳統的1字節編碼沒有問題。是的,有些角色被視爲負值,但他們仍然是那些閱讀時的角色。如果你把它們寫回原樣,它們就會成爲它們。

由於您確定每個歐元符號有3個char s,因此您正在處理一些Unicode編碼,如UTF-8。

這意味着,您應該將它們存儲在一些多字節類型中,如wchar_t。但這與您在char中存儲數據的要求相矛盾。

我建議你先將文件轉換爲1字節編碼,例如Win1252。該編碼對歐元符號有1個字節。

如果你想使用Unicode,恐怕很難處理負面的char。用正整數表示Unicode值是傳統的。

相關問題